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

Поиск:

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


Новичок



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

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



Написал небольшой редактор, когда рисую объекты, например, с помощью ф-ции auxSolidSphere, то цвет меняется с серого на белый:

user posted image

user posted image

здесь часть кода:
Код

//---------------------------------------------------------------------------
//----- COpenGL -------------------------------------------------------------
//---------------------------------------------------------------------------
COpenGL::COpenGL(NWndStyle AStyle) : CCanvas(AStyle)
{
  M1.Set(0, 0);
  M2.Set(App->Screen->GetWidth(), App->Screen->GetHeight());

  Create();
//  CreateWnd();
  Paint_Create();
}
void SetupLighting()
{
    GLfloat MaterialAmbient[] = {0.5, 0.5, 0.5, 1.0};
    GLfloat MaterialDiffuse[] = {1.0, 1.0, 1.0, 1.0};
    GLfloat MaterialSpecular[] = {1.0, 1.0, 1.0, 1.0};
    GLfloat MaterialShininess[] = {50.0};
    GLfloat AmbientLightPosition[] = {-10.0, 10.0, -10.0, 0.0};
    GLfloat LightAmbient[] = {0.5, 0.5, 0.5, 0};

    glMaterialfv(GL_FRONT, GL_AMBIENT, MaterialAmbient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, MaterialDiffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR, MaterialSpecular);
    glMaterialfv(GL_FRONT, GL_SHININESS, MaterialShininess);
    glLightfv(GL_LIGHT0, GL_POSITION, AmbientLightPosition);
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, LightAmbient);

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_COLOR_MATERIAL);
    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
    glShadeModel(GL_SMOOTH);
}
bool COpenGL::Paint_Create()
{
    hdc = GetDC(hwnd);

    PIXELFORMATDESCRIPTOR pfd;
    memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.cDepthBits = 32;
    int N = ChoosePixelFormat(hdc, &pfd);
    SetPixelFormat (hdc, N, &pfd);
    hrc = wglCreateContext(hdc);
    wglMakeCurrent(hdc, hrc);

//    glEnable(GL_DEPTH_TEST);
//    glEnable(GL_CULL_FACE);
    SetupLighting();


    glViewport(0, 0, W1Const, H1Const);
    glPushMatrix();
    glScaled(2.0 / (W1Const), 2.0 / (H1Const), ZScale);
    glRotated(-90, 0, 0, 1);
    glTranslated(HConst / 2 - GetHeight() + Koef, -WConst / 2, ZTrans);
    //  gluOrtho2D(0, 0, 800, 600);
    return true;
}
bool COpenGL::Paint_Rechange()
{
    glPopMatrix();
    glPushMatrix();
    glScaled(2.0 / (W1Const), 2.0 / (H1Const), ZScale);
    glRotated(-90, 0, 0, 1);
    glTranslated(HConst / 2 - GetHeight() + Koef, -WConst / 2, ZTrans);
    return true;
}
bool COpenGL::Paint_Begin()
{
    Paint_Rechange();
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_ACCUM_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
    return true;
}
bool COpenGL::Paint_End()
{
  glFlush();
  SwapBuffers(hdc);
  return true;
}
bool COpenGL::Paint_Destroy()
{
  glPopMatrix();
  wglMakeCurrent(NULL, NULL);
  ReleaseDC(hwnd, hdc);
  return true;
}
void COpenGL::SetColor(CColor C)
{
  CCanvas::SetColor(C);
}
void COpenGL::SetColor(real R, real G, real B)
{
  CCanvas::SetColor(R, G, B);
  glColor3f(R, G, B);
}

void COpenGL::Pen_Line(CRect R)
{
  real X1 = R.M1.X;
  real Y1 = R.M1.Y;
  real X2 = R.M2.X;
  real Y2 = R.M2.Y;

  glBegin(GL_LINES);
    glVertex2f (X1, Y1);
    glVertex2f (X2, Y2);
  glEnd();
  glBegin(GL_POINTS);
    glVertex2f (X2, Y2);
  glEnd();
}
void COpenGL::Pen_Rectangle(CRect R)
{
  real X1 = R.M1.X;
  real Y1 = R.M1.Y;
  real X2 = R.M2.X;
  real Y2 = R.M2.Y;

//  glEdgeFlag(true);

  Pen_Line(CRect(X1, Y1, X2, Y1, false));
  Pen_Line(CRect(X2, Y1, X2, Y2, false));
  Pen_Line(CRect(X2, Y2, X1, Y2, false));
  Pen_Line(CRect(X1, Y2, X1, Y1, false));
}

void COpenGL::Pen_Ellipse(CRect R)
{
  real X1 = R.M1.X;
  real Y1 = R.M1.Y;
  real X2 = R.M2.X;
  real Y2 = R.M2.Y;
  real Two = 2;
  real XMid = Round((X1 + X2) / Two);
  real YMid = Round((Y1 + Y2) / Two);
  real RX = XMid - X1;
  real RY = YMid - Y1;
  glBegin(GL_LINE_LOOP);
    real TwoPI(2 * M_PI);
    real Step(M_PI / 64);
    for (real i = 0; i < TwoPI; i += Step)
    {
      real X = XMid + cosl(i) * RX;
      real Y = YMid + sinl(i) * RY;
      glVertex2f(X, Y);
    }
  glEnd();
}
void COpenGL::Pen_SetStyle(int value)
{
    Pen_Style = value;
    if (Pen_Style != 0)
    {
        glEnable(GL_LINE_STIPPLE);
        if (Pen_Style == 1) glLineStipple(1, 0x0f0f);
        if (Pen_Style == 2) glLineStipple(1, 0x5555);
    }
    else {
        glDisable(GL_LINE_STIPPLE);
        glLineStipple(1, 0xffff);
    }
}
void COpenGL::Brush_Rectangle(CRect R)
{
  CRect r = R;
  r.ChangeRect(0, 0, 1, 1);
  glBegin(GL_QUADS);
    glVertex2f(r.M1.X, r.M1.Y);
    glVertex2f(r.M2.X, r.M1.Y);
    glVertex2f(r.M2.X, r.M2.Y);
    glVertex2f(r.M1.X, r.M2.Y);
  glEnd();
}
void COpenGL::Brush_Ellipse(CRect R)
{
  real X1 = R.M1.X;
  real Y1 = R.M1.Y;
  real X2 = R.M2.X;
  real Y2 = R.M2.Y;
  real XMid = Round((X1 + X2) / 2);
  real YMid = Round((Y1 + Y2) / 2);
  real RX = XMid - X1;
  real RY = YMid - Y1;
  real TwoPI(2 * M_PI);
  real Step(M_PI / 32);
  glBegin(GL_POLYGON);
    for (real i = 0; i < TwoPI; i += Step)
    {
      real X = XMid + cosl(i) * RX;
      real Y = YMid + sinl(i) * RY;
      glVertex2f(X, Y);
    }
  glEnd();
}
void COpenGL::Cube(CRect R)
{
//  Pen_Rectangle(R);
    real X = R.M1.X;
    real Y = R.M1.Y;
    real W = R.GetWidth();
    real H = R.GetHeight();
    
    glPushMatrix();
    glTranslated(Y + H / 2, X + W / 2, 0);
    glScaled(H, W, 1);
    glRotated(90, 0, 0, 1);

    glRotated(45, 45, 45, 1);
    auxSolidCube(0.6);
    glPopMatrix();
}
void COpenGL::Sphere(CRect R)
{
    real X = R.M1.X;
    real Y = R.M1.Y;
    real W = R.GetWidth();
    real H = R.GetHeight();
    
    glPushMatrix();
    glTranslated(Y + H / 2, X + W / 2, 0);
    glScaled(H, W, 1);
    glRotated(90, 0, 0, 1);

//    glRotated(45, 45, 45, 1);
    auxSolidSphere(0.5);
    glPopMatrix();
}
void COpenGL::Teapot(CRect R)
{
    real X = R.M1.X;
    real Y = R.M1.Y;
    real W = R.GetWidth();
    real H = R.GetHeight();
    
    glPushMatrix();
    glTranslated(Y + H / 2, X + W / 2, 0);
    glScaled(H, W, 1);
    glRotated(90, 0, 0, 1);

//    glRotated(45, 45, 45, 1);
    auxSolidTeapot(0.3);
    glPopMatrix();
}


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

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

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


 




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


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

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