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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расчет нормалей к граням куба 
:(
    Опции темы
Rijndael
Дата 5.11.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.11.2007
Где: Новосибирск

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



Переделал пример из "справочника..."
Код

// GLUT.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <gl\glut.h>

GLfloat spin = 0.0;

#define X 80.0
GLfloat coords[8][3] = {
    {-X,-X,X},{X,-X,X},{X,X,X},{-X,X,X},
    {-X,-X,-X},{X,-X,-X},{X,X,-X},{-X,X,-X}
};

GLbyte indices[6][4] = {
    {0,1,2,3},{5,6,2,1},
    {5,4,7,6},{0,4,5,1},
    {4,0,3,7},{7,3,2,6}
};

void init(void)
{
    GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
    GLfloat mat_shininess[]={50.0};
    GLfloat light_position[]={0.5,0.5,0.5,0.0};
    GLfloat white_light[]={0.99,0.99,0.99,0.0};

    glClearColor(1.0,1.0,1.0,0.0);
    glColor3f(0.8,0.0,0.0);
    glShadeModel(GL_SMOOTH);

    glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
    glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
    glLightfv(GL_LIGHT0,GL_POSITION,light_position);
    glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);
    glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);

    glEnable(GL_NORMALIZE);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);

    //glPolygonMode(GL_FRONT,GL_LINE);
    glEnable(GL_CULL_FACE);
}

void draw(float *v1, float *v2, float *v3, float *v4)
{
    glBegin(GL_QUADS);
            glNormal3fv(v1);
            glVertex3fv(v1);
            glNormal3fv(v2);
            glVertex3fv(v2);
            glNormal3fv(v3);
            glVertex3fv(v3);
            glNormal3fv(v4);
            glVertex3fv(v4);
    glEnd();
}

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glRotatef(spin,0.5,0.0,0.0);

    glBegin(GL_QUADS);
        for(int i=0; i<6; i++)
        {
            draw(&coords[indices[i][0]][0],
                &coords[indices[i][1]][0],
                &coords[indices[i][2]][0],
                &coords[indices[i][3]][0]);
        }
    glEnd();

    glPopMatrix();
    glutSwapBuffers();
}

void rotate()
{
    spin += 0.01;
    if (spin > 360) spin -= 360;
    glutPostRedisplay();
}

void reshape(int w,int h)
{
    glViewport(0,0,(GLsizei) w, (GLsizei) h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if (w<=h)
        glOrtho(-200.0,200.0,-200.0*(GLfloat)h/(GLfloat)w,200.0*(GLfloat)h/(GLfloat)w,-200.0,200.0);
    else
        glOrtho(-200.0*(GLfloat)w/(GLfloat)h,200.0*(GLfloat)w/(GLfloat)h,-200.0,200.0,-200.0,200.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

int main(int argc, char **argv)
{    
    FreeConsole();
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
    glutInitWindowSize(400,400);
    glutInitWindowPosition(100,100);
    glutCreateWindow("Line Stipple Patterns");
    init();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutIdleFunc(rotate);
    glutMainLoop();
    return 0;
}


В общем, все нормально, но в результате на гранях куба получаются непонятные "ребра", разделяющие грань на светлый/темный треугольники...
user posted image

Вопросы:
1. Почему возникают эти линии?
2. Уместно ли в данном случае применение ф-ии glEnable(GL_NORMALIZE);? smile

Это сообщение отредактировал(а) Rijndael - 5.11.2007, 19:52
PM MAIL ICQ   Вверх
Rijndael
Дата 5.11.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.11.2007
Где: Новосибирск

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



Разобрался.
PM MAIL ICQ   Вверх
Rickert
Дата 6.11.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Обычно говорят в чём проблема была, так на будущее-  вдруг у кого-то похожая проблема встанет ребром smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
DigitSphinx
Дата 8.11.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да кстати !


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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