Модераторы: Rickert, Alexeis, BorisVorontsov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с OpenGL, белый экран. 
:(
    Опции темы
DoctorSwat
Дата 20.4.2013, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.4.2013

Репутация: нет
Всего: нет



Ребят помогите пожалуйста. 
Проблема в том ,что при компиляции любого экзампла буть то на глуте или чистом гл, вместо положеной картинки отображается белый экран.
Самое интересное, что старый, затёртый до проект запускается и работает.Также работает проект скачаный с кодепрожекта, который показывает как в виндовс формс засуныть гл.
Что я сделал:
-переустановил дрова(nvidia gt640)
-прочекал либы
-переустановил студию
Работаю в VC 2010 ultimate.
Я не считаю себя серьёзным програмистом, я скорее любитель.С гл работаю не первый раз.Но такое случается в первые.
Код выкладывать не буду, т.к. считаю, что он тут не очень полезен.Примером кода может послужить обычный например глутовский пример.
Прошу помочь, уже 3 дня не могу разобраться с этой запарой. 

Ну если кому таки интересно, то вот:
Код



#define _WIN32_WINNT 0x0500

#include <string>
#include <iostream>
#include <fstream>
#include <GL/glut.h>

#include <windows.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <process.h>

#include <physics/type_box.h>
#include <cmd.h>
#include <startparametrs.h>
#include <glh/glh_glut.h>
#include <console.h>


using namespace glh;


glut_callbacks cb;
glut_console dconsole;
glut_swapbuffers swapbuffers;

outmsg msgtofile("outmsg.buffer");



int argc_;
char argv_;

std::ofstream tolog("log.txt"); 

std::string buf;

int WindW=700;
int WindH=700; 


void display()
{
 glClear(GL_COLOR_BUFFER_BIT);  

    glClearColor(1,1,1,1);

phys_obj_box re;
re.create(10,5);

glutPostRedisplay();


}


void MouseMove(int ax,int ay)
{

}

void MousePressed(int button,int state,int x,int y)
{

}

void MousePressedMove(int x,int y)
{
  
}



void key(unsigned char key, int, int)
{
switch(key)
{
    case'+': glScalef(1.1,1.1,1.1);  glutPostRedisplay();     break;
    case'-': glScalef(0.9,0.9,0.9);  glutPostRedisplay();     break;   
    
    case 'a':    glutPostRedisplay(); break;
    case 'd':    glutPostRedisplay();  break;     
    case 's':    glutPostRedisplay(); break;
    case 'w':    glutPostRedisplay();  break;
    case 'f':    glutPostRedisplay();  break;
}     
}


void specialKey(int keys,int x,int y)
{
switch(keys)
{   
    case GLUT_KEY_F3:      console();  break;  
    case GLUT_KEY_UP:      glutPostRedisplay(); break;
    case GLUT_KEY_DOWN:    glutPostRedisplay();  break;
    case GLUT_KEY_LEFT:    glutPostRedisplay(); break;
    case GLUT_KEY_RIGHT:   glutPostRedisplay();  break; 
}          
}



void reshape(int width, int height)
{
  glViewport(0,0,width,height);
  glMatrixMode(GL_PROJECTION); 
  glLoadIdentity();
  glOrtho(-20,20,-20,20,-20,20);
  glMatrixMode(GL_MODELVIEW);
}


void idle()
{
std::cout<<"test"<<std::endl;
glutPostRedisplay();     
}



void listen_buffer(void* pParams)
{
    for(;;)
    {
        buf="___________";
    ifstream buffer("outline.buffer",ios::binary);
    
    buffer>>buf;
    if(buf!="___________")
    {
    std::cout<<"-<<"<<buf<<endl;
    ofstream outline("outline.buffer",ios::binary);
    tolog<<"-<<"<<buf<<std::endl;
    }


    }

    //_endthread();
}







int main(int argc, char *argv[])
{   

    for(int i=0;i<argc;i++)
    {
    if (argv[i][0]=='-' && argv[i][1]=='n' && argv[i][2]=='o' && argv[i][3]=='c' && argv[i][4]=='m' && argv[i][5]=='d') 
     {
     FreeConsole(); 
     }
    }



    _beginthread(listen_buffer, 0, NULL);
    dconsole.add("test");
    
    startparametrs sp(argc,argv);
    
    
    glutInitWindowSize(WindW,WindH);    
    glutInitWindowPosition(40,40);          
    glutInit(&argc, argv);                          
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);      
    
    glutCreateWindow("World of tarantas");                 

    glut_helpers_initialize();
    
    cb.reshape_function=reshape;
    cb.display_function=display;
    cb.keyboard_function=key;
    cb.special_function=specialKey;
    cb.mouse_function=MousePressed;
    cb.motion_function=MouseMove;
    cb.passive_motion_function=MousePressedMove;
    cb.idle_function=idle;
    
    
    glut_add_interactor(&cb);
    glut_add_interactor(&dconsole);
    glut_add_interactor(&swapbuffers);

    
    glutPostRedisplay();
    
    glutMainLoop();
    

}



PM MAIL   Вверх
baldina
Дата 20.4.2013, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



а каким образом и, главное, каким цветом рисуется 
Цитата(DoctorSwat @  20.4.2013,  18:48 Найти цитируемый пост)
phys_obj_box re;

?
PM MAIL   Вверх
DoctorSwat
Дата 20.4.2013, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.4.2013

Репутация: нет
Всего: нет



Только не смейтесь)
Код

class phys_obj_box
{
      public:
      
      float X;
      float Y;
      
      
      
      int create(float x,float y)
      {
      X=x;
      Y=y;
      glBegin(GL_LINES);
      glVertex2f(-x,y);
      glVertex2f(x,y);
      glEnd(); 
      return true;
      }
      
      phys_obj_box();       
};



Но думаю, что проблема не в этом.
Вобще мне кажется, что я не дописал самое главное. Раньше все мои проекты нормально работали и этот тоже работал.А теперь вот такая штука.
user posted image

Это сообщение отредактировал(а) DoctorSwat - 20.4.2013, 19:18
PM MAIL   Вверх
DoctorSwat
Дата 20.4.2013, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.4.2013

Репутация: нет
Всего: нет



Блин сори проект на глуте рабоет... Точно пропусил в углу экрана фрапс, который тут работает.Но тогда вопрос вот в чём:
Имеем вот такой код:
Код

#pragma once

#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>

using namespace System::Windows::Forms;

namespace OpenGLForm 
{
    public ref class COpenGL: public System::Windows::Forms::NativeWindow
    {
    public:
        COpenGL(System::Windows::Forms::Panel ^ parentForm, GLsizei iWidth, GLsizei iHeight)
        {
            CreateParams^ cp = gcnew CreateParams;

            // Set the position on the form
            cp->X = 0;
            cp->Y = 0;
            cp->Height = iHeight;
            cp->Width = iWidth;

            // Specify the form as the parent.
            cp->Parent = parentForm->Handle;

            // Create as a child of the specified parent and make OpenGL compliant (no clipping)
            cp->Style = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;

            // Create the actual window
            this->CreateHandle(cp);

            m_hDC = GetDC((HWND)this->Handle.ToPointer());

            if(m_hDC)
            {
                MySetPixelFormat(m_hDC);
                ReSizeGLScene(iWidth, iHeight);
                InitGL();
            }

            rtri = 0.0f;
            rquad = 0.0f;
        }


        System::Void Render(System::Void)
        {
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    // Clear screen and depth buffer
            glLoadIdentity();                                    // Reset the current modelview matrix
            glTranslatef(-1.5f,0.0f,-6.0f);                        // Move left 1.5 units and into the screen 6.0
            glRotatef(rtri,0.0f,1.0f,0.0f);                        // Rotate the triangle on the y axis 
            glBegin(GL_TRIANGLES);                                // Start drawing a triangle
                glColor3f(1.0f,0.0f,0.0f);                        // Red
                glVertex3f( 0.0f, 1.0f, 0.0f);                    // Top Of triangle (front)
                glColor3f(0.0f,1.0f,0.0f);                        // Green
                glVertex3f(-1.0f,-1.0f, 1.0f);                    // Left of triangle (front)
                glColor3f(0.0f,0.0f,1.0f);                        // Blue
                glVertex3f( 1.0f,-1.0f, 1.0f);                    // Right of triangle (front)
                glColor3f(1.0f,0.0f,0.0f);                        // Red
                glVertex3f( 0.0f, 1.0f, 0.0f);                    // Top Of triangle (right)
                glColor3f(0.0f,0.0f,1.0f);                        // Blue
                glVertex3f( 1.0f,-1.0f, 1.0f);                    // Left of triangle (right)
                glColor3f(0.0f,1.0f,0.0f);                        // Green
                glVertex3f( 1.0f,-1.0f, -1.0f);                    // Right of triangle (right)
                glColor3f(1.0f,0.0f,0.0f);                        // Red
                glVertex3f( 0.0f, 1.0f, 0.0f);                    // Top Of triangle (back)
                glColor3f(0.0f,1.0f,0.0f);                        // Green
                glVertex3f( 1.0f,-1.0f, -1.0f);                    // Left of triangle (back)
                glColor3f(0.0f,0.0f,1.0f);                        // Blue
                glVertex3f(-1.0f,-1.0f, -1.0f);                    // Right of triangle (back)
                glColor3f(1.0f,0.0f,0.0f);                        // Red
                glVertex3f( 0.0f, 1.0f, 0.0f);                    // Top Of triangle (left)
                glColor3f(0.0f,0.0f,1.0f);                        // Blue
                glVertex3f(-1.0f,-1.0f,-1.0f);                    // Left of triangle (left)
                glColor3f(0.0f,1.0f,0.0f);                        // Green
                glVertex3f(-1.0f,-1.0f, 1.0f);                    // Right of triangle (left)
            glEnd();                                            // Done drawing the pyramid

            glLoadIdentity();                                    // Reset the current modelview matrix
            glTranslatef(1.5f,0.0f,-7.0f);                        // Move right 1.5 units and into the screen 7.0
            glRotatef(rquad,1.0f,1.0f,1.0f);                    // Rotate the quad on the x axis 
            glBegin(GL_QUADS);                                    // Draw a quad
                glColor3f(0.0f,1.0f,0.0f);                        // Set The color to green
                glVertex3f( 1.0f, 1.0f,-1.0f);                    // Top Right of the quad (top)
                glVertex3f(-1.0f, 1.0f,-1.0f);                    // Top Left of the quad (top)
                glVertex3f(-1.0f, 1.0f, 1.0f);                    // Bottom left of the quad (top)
                glVertex3f( 1.0f, 1.0f, 1.0f);                    // Bottom right of the quad (top)
                glColor3f(1.0f,0.5f,0.0f);                        // Set The color to orange
                glVertex3f( 1.0f,-1.0f, 1.0f);                    // Top Right of the quad (bottom)
                glVertex3f(-1.0f,-1.0f, 1.0f);                    // Top Left of the quad (bottom)
                glVertex3f(-1.0f,-1.0f,-1.0f);                    // Bottom left of the quad (bottom)
                glVertex3f( 1.0f,-1.0f,-1.0f);                    // Bottom right of the quad (bottom)
                glColor3f(1.0f,0.0f,0.0f);                        // Set The color to red
                glVertex3f( 1.0f, 1.0f, 1.0f);                    // Top Right of the quad (front)
                glVertex3f(-1.0f, 1.0f, 1.0f);                    // Top Left of the quad (front)
                glVertex3f(-1.0f,-1.0f, 1.0f);                    // Bottom left of the quad (front)
                glVertex3f( 1.0f,-1.0f, 1.0f);                    // Bottom right of the quad (front)
                glColor3f(1.0f,1.0f,0.0f);                        // Set The color to yellow
                glVertex3f( 1.0f,-1.0f,-1.0f);                    // Top Right of the quad (back)
                glVertex3f(-1.0f,-1.0f,-1.0f);                    // Top Left of the quad (back)
                glVertex3f(-1.0f, 1.0f,-1.0f);                    // Bottom left of the quad (back)
                glVertex3f( 1.0f, 1.0f,-1.0f);                    // Bottom right of the quad (back)
                glColor3f(0.0f,0.0f,1.0f);                        // Set The color to blue
                glVertex3f(-1.0f, 1.0f, 1.0f);                    // Top Right of the quad (left)
                glVertex3f(-1.0f, 1.0f,-1.0f);                    // Top Left of the quad (left)
                glVertex3f(-1.0f,-1.0f,-1.0f);                    // Bottom left of the quad (left)
                glVertex3f(-1.0f,-1.0f, 1.0f);                    // Bottom right of the quad (left)
                glColor3f(1.0f,0.0f,1.0f);                        // Set The color to violet
                glVertex3f( 1.0f, 1.0f,-1.0f);                    // Top Right of the quad (right)
                glVertex3f( 1.0f, 1.0f, 1.0f);                    // Top Left of the quad (right)
                glVertex3f( 1.0f,-1.0f, 1.0f);                    // Bottom left of the quad (right)
                glVertex3f( 1.0f,-1.0f,-1.0f);                    // Bottom right of the quad (right)
            glEnd();                                            // Done drawing the quad

            rtri+=0.2f;                                            // Increase the rotation variable for the triangle
            rquad-=0.15f;                                        // Decrease the rotation variable for the quad
        }

        System::Void SwapOpenGLBuffers(System::Void)
        {
            SwapBuffers(m_hDC) ;
        }

    private:
        HDC m_hDC;
        HGLRC m_hglrc;
        GLfloat    rtri;                // Angle for the triangle
        GLfloat    rquad;                // Angle for the quad

    protected:
        ~COpenGL(System::Void)
        {
            this->DestroyHandle();
        }

        GLint MySetPixelFormat(HDC hdc)
        {
            static    PIXELFORMATDESCRIPTOR pfd=                // pfd Tells Windows How We Want Things To Be
                {
                    sizeof(PIXELFORMATDESCRIPTOR),                // Size Of This Pixel Format Descriptor
                    1,                                            // Version Number
                    PFD_DRAW_TO_WINDOW |                        // Format Must Support Window
                    PFD_SUPPORT_OPENGL |                        // Format Must Support OpenGL
                    PFD_DOUBLEBUFFER,                            // Must Support Double Buffering
                    PFD_TYPE_RGBA,                                // Request An RGBA Format
                    16,                                        // Select Our Color Depth
                    0, 0, 0, 0, 0, 0,                            // Color Bits Ignored
                    0,                                            // No Alpha Buffer
                    0,                                            // Shift Bit Ignored
                    0,                                            // No Accumulation Buffer
                    0, 0, 0, 0,                                    // Accumulation Bits Ignored
                    16,                                            // 16Bit Z-Buffer (Depth Buffer)  
                    0,                                            // No Stencil Buffer
                    0,                                            // No Auxiliary Buffer
                    PFD_MAIN_PLANE,                                // Main Drawing Layer
                    0,                                            // Reserved
                    0, 0, 0                                        // Layer Masks Ignored
                };
            
            GLint  iPixelFormat; 
         
            // get the device context's best, available pixel format match 
            if((iPixelFormat = ChoosePixelFormat(hdc, &pfd)) == 0)
            {
                MessageBox::Show("ChoosePixelFormat Failed");
                return 0;
            }
             
            // make that match the device context's current pixel format 
            if(SetPixelFormat(hdc, iPixelFormat, &pfd) == FALSE)
            {
                MessageBox::Show("SetPixelFormat Failed");
                return 0;
            }

            if((m_hglrc = wglCreateContext(m_hDC)) == NULL)
            {
                MessageBox::Show("wglCreateContext Failed");
                return 0;
            }

            if((wglMakeCurrent(m_hDC, m_hglrc)) == NULL)
            {
                MessageBox::Show("wglMakeCurrent Failed");
                return 0;
            }


            return 1;
        }

        bool InitGL(GLvoid)                                        // All setup for opengl goes here
        {
            glShadeModel(GL_SMOOTH);                            // Enable smooth shading
            glClearColor(0.0f, 0.0f, 0.0f, 0.5f);                // Black background
            glClearDepth(1.0f);                                    // Depth buffer setup
            glEnable(GL_DEPTH_TEST);                            // Enables depth testing
            glDepthFunc(GL_LEQUAL);                                // The type of depth testing to do
            glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);    // Really nice perspective calculations
            return TRUE;                                        // Initialisation went ok
        }

        GLvoid ReSizeGLScene(GLsizei width, GLsizei height)        // Resize and initialise the gl window
        {
            if (height==0)                                        // Prevent A Divide By Zero By
            {
                height=1;                                        // Making Height Equal One
            }

            glViewport(0,0,width,height);                        // Reset The Current Viewport

            glMatrixMode(GL_PROJECTION);                        // Select The Projection Matrix
            glLoadIdentity();                                    // Reset The Projection Matrix

            // Calculate The Aspect Ratio Of The Window
            gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

            glMatrixMode(GL_MODELVIEW);                            // Select The Modelview Matrix
            glLoadIdentity();                                    // Reset The Modelview Matrix
        }
    };
}


И его использование:
Код

#pragma once

#include <OpenGL.h>

namespace gltestforms {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using namespace OpenGLForm;

    /// <summary>
    /// Сводка для Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void) 
        {
            InitializeComponent();
            
            OpenGL = gcnew COpenGL(panel1, 640, 480);
            //TODO: добавьте код конструктора

        }

    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }

    protected: 

    private: OpenGLForm::COpenGL ^ OpenGL;
    private: System::Windows::Forms::Timer^  timer1;
    private: System::Windows::Forms::Panel^  panel1;
    private: System::ComponentModel::IContainer^  components;
             
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>


#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->components = (gcnew System::ComponentModel::Container());
            this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));
            this->panel1 = (gcnew System::Windows::Forms::Panel());
            this->SuspendLayout();
            // 
            // timer1
            // 
            this->timer1->Interval = 1;
            this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);
            // 
            // panel1
            // 
            this->panel1->Location = System::Drawing::Point(118, 103);
            this->panel1->Name = L"panel1";
            this->panel1->Size = System::Drawing::Size(372, 282);
            this->panel1->TabIndex = 0;
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(566, 462);
            this->Controls->Add(this->panel1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);

        }
#pragma endregion
    private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e)
             {

                 UNREFERENCED_PARAMETER(sender);
                 UNREFERENCED_PARAMETER(e);
                 OpenGL->Render();
                 OpenGL->SwapOpenGLBuffers();
             }
    };
}



В результате всего этого получаем такую картину:
user posted image

А должно быть так, как тут(только с олним окном)
user posted image

В обоих примерах одинаковый код из первого контенера. 
PM MAIL   Вверх
DoctorSwat
Дата 22.4.2013, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.4.2013

Репутация: нет
Всего: нет



ап. помогете пожалуйста!
PM MAIL   Вверх
baldina
Дата 22.4.2013, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Timer тут, видимо, не нужен. А нужно переопрелелить Paint()

Код

  private: System::Void Form1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) {
             OpenGL->Render();
             OpenGL->SwapOpenGLBuffers();
           }

PM MAIL   Вверх
DoctorSwat
Дата 22.4.2013, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.4.2013

Репутация: нет
Всего: нет



baldina, Спасибо!Теперь работает, но без таймера нет анимации.Объясните, если не сложно:
почему вот тут такой код работает
Код

private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e)
             {
                 wglMakeCurrent(OpenGL->m_hDC,OpenGL->m_hglrc);
                 OpenGL->Render();
                 OpenGL->SwapOpenGLBuffers();

                 wglMakeCurrent(OpenGL_2->m_hDC,OpenGL->m_hglrc);
                 OpenGL_2->Render();
                 OpenGL_2->SwapOpenGLBuffers();

                 wglMakeCurrent(OpenGL_3->m_hDC,OpenGL->m_hglrc);
                 OpenGL_3->Render();
                 OpenGL_3->SwapOpenGLBuffers();

                 
                 wglMakeCurrent(OpenGL_4->m_hDC,OpenGL->m_hglrc);
                 OpenGL_4->Render();
                 OpenGL_4->SwapOpenGLBuffers();

             }



а вот тут не работает
Код

    private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e)
             {
                      OpenGL->Render();
                  OpenGL->SwapOpenGLBuffers();
             }


Это сообщение отредактировал(а) DoctorSwat - 22.4.2013, 21:40
PM MAIL   Вверх
Vetos
Дата 13.5.2013, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Ну по всей видимости нужно тоже вызвать wglMakeCurrent();


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
GorbunovDiman
Дата 24.3.2014, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



Всем доброго времени суток.  я только недавно начал изучать GL.
У меня похожая проблема, и, чтобы не  создовать отдельную тему решил написать сюда.

Вот код
Код

#include <GL/gl.h>
#include <GL/glut.h>

void myInit(){
    glColor3f(1.0f,0.0f,0.0f);
    glPointSize(1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,640.0,0.0,480.0);};

void myDisplay(){

    glClear(GL_COLOR_BUFFER_BIT);

        glBegin(GL_POINTS);
            glVertex2d(0.0,0.0);
            glVertex2d(640.0,480.0);
        glEnd;
  
    glFlush();
  // glutSwapBuffers();
};

void myReshape(int width, int height){

};
int main(int argc, char** argv){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(100,150);
    glutCreateWindow("Example");
    glutDisplayFunc(myDisplay);

    myInit();


    glutMainLoop();
};



Пример почти книжный, но тем не мение он не работает. Причём заметил если убрать вот эти строки:
Код

        glBegin(GL_LINES);
            glVertex2d(0.0,0.0);
            glVertex2d(640.0,480.0);
        glEnd;

Я вижу черный экран, а сними белый (хотя должна быть красная линия).

Собственно вопрос: Почему такое может происходить? И что с этим можно поделать?


Примечание: Замена Glut_Single на GLUT_DOUBLE не решает проблему. (как это предлогается на многих форумах).
Спасибо за внимание.
PM MAIL   Вверх
DoctorSwat
Дата 24.3.2014, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.4.2013

Репутация: нет
Всего: нет



Быть может стоит задать цвет перед тем как рисовать? Возможно из-за того, что экран чёрный ваша точка/линия сливается с фоном. 
PM MAIL   Вверх
Alexeis
Дата 24.3.2014, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



  Да, тут по ходу плоскость вывода -1 до 1 единицы. Как раз в толщину линии. 
Мне кажется не хватает функции
glViewport();


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
GorbunovDiman
Дата 24.3.2014, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



На счет glVievport и цвета пробовал уже, но это ни чего не меняет.
Код

void myInit(){
    glClearColor(0.0,0.0,0.0,0.0);
    glColor3f(1.0f,0.0f,0.0f);
    glPointSize(1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,640.0,0.0,480.0);
    glViewport(0.0,0.0,640,480);
    };

Как -то так, причём если написать такой код 
Код

#include <GL/gl.h>
#include <GL/glut.h>


void myInit(void)
{
  //  glClearColor(1.0,1.0,1.0,0.0);
    glColor3f(1.0f,0.0f,0.0f);
    glPointSize(1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,640.0,0.0,480.0);
}



void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POINTS);
        glVertex2d(100,50);
        glVertex2d(100,130);
        glVertex2d(150,130);
    glEnd();
    glFlush();
}

int main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(1024,640);
    glutInitWindowPosition(100,150);
    glutCreateWindow("EXAMPLE");
    glutDisplayFunc(myDisplay);
    myInit();
    glutMainLoop();
}


То  работает (рисует три точки).

Принципиальных отличий увы не вижу.
PM MAIL   Вверх
GorbunovDiman
Дата 24.3.2014, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



Ага а вот и отличие заметил smile 
В нерабочем варианте было
Код

glEnd;


А в рабочем
Код

glEnd();

То есть всего одна пара скобок засветила весь кадр.

Всем спасибо за ответы!

P.S. Попутно заметил (может кому-нибудь это пожет не наступить на грабли), что если поменять
Код

#include <GL/glut.h>
#include <GL/gl.h>


На
Код

#include <GL/gl.h>
#include <GL/glut.h>


То компилятор ругается так, как будто я забыл подключить необходимые библиотеки. Примерно так:
Код

|undefined reference to `glutInitWindowSize'

Хотя почему так я до сих пор не понял, но это работает. 
PM MAIL   Вверх
Amp
Дата 24.3.2014, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 2
Всего: 17



Цитата(GorbunovDiman @  24.3.2014,  17:01 Найти цитируемый пост)
Принципиальных отличий увы не вижу. 

glEnd vs. glEnd() ?
PM MAIL   Вверх
GorbunovDiman
Дата 24.3.2014, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



Цитата

glEnd vs. glEnd() ? 

Да ошибка была именно здесь (если правильно понял знак вопроса).
А раньше ведь и не думал, что процедура/функция может скомпелироваться если просто забыть скобки.
PM MAIL   Вверх
Amp
Дата 24.3.2014, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 2
Всего: 17



Я думаю, что компилятор должен был выдать warning на эту строчку.
PM MAIL   Вверх
GorbunovDiman
Дата 24.3.2014, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



Цитата(Amp @ 24.3.2014,  18:24)
Я думаю, что компилятор должен был выдать warning на эту строчку.

Ни чего подобного. 
Код

void abcd(){
................
};
int main(){
abcd;

};


Даже так не ругается. (Проверено экспериментально) 
PM MAIL   Вверх
tzirechnoy
Дата 25.3.2014, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Так для gcc надо с -Wall компилировать.
Для остальных компиляторов и сред -- тожэ есть либо ключи, который включают ворнинги, либо логи, в которых они записаны.
PM MAIL   Вверх
Amp
Дата 25.3.2014, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 2
Всего: 17



2013-я студия при любом warning level-е выдает предупреждение на это (кроме /W0 разумеется).
PM MAIL   Вверх
DevNetAleksey
Дата 5.12.2017, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.12.2017

Репутация: нет
Всего: нет



PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.2306 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.