Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2012, 13:56   #1
dann.ftk
http://resumup.com
 
Регистрация: 18.12.2011
Сообщений: 9
По умолчанию OpenGL. Функция display. Некорректный вывод

Добрый день, помогите решить проблемы и объяснить в чем причина.

Основной файл выглядит так:
Код:
#include <GLUT/glut.h>
#include <OpenGL/gl.h>

#include <stdlib.h>

#include "scn_params.h"


void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();
    glColor4d(0.0, 1.0, 1.0, 1.0);
    glutWireTeapot(1.0);
    glPopMatrix();
    glFinish();
    return;
}

void reshape(GLint w, GLint h){
    width = w;
    height = h;
    glViewport(0, 0, w, h);
    
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(angle, (GLdouble)w/h, znear, zfar);
    
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);
    
    return;
}

void keyboard(unsigned char key, GLint x, GLint y){
#define ESCAPE '\033'
    if (key == ESCAPE){
        exit(0);
    }
    return;
}

void mouse(GLint button, GLint state, GLint x, GLint y){
    return;
}

void redraw(){
    return;
}

int main(int argc, char * argv[])
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
    glutInitWindowSize(width, height);
    glutInitWindowPosition(xpos, ypos);
    glutCreateWindow("TEST");
    
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutDisplayFunc(display);
    glutIdleFunc(redraw);
    glutReshapeFunc(reshape);
    
    glClearColor(0.0,0.0,0.0,1.0);
    
    glutMainLoop();
    return 0;
}
Некоторые переменные определены как:

Код:
GLint xpos = 200;
GLint ypos = 200;
GLint width = 500;
GLint height = 500;

/*perspective*/
GLdouble angle = 45.0;
GLdouble znear = 1e-3;
GLdouble zfar = 100.0;

/*camera*/
GLdouble eyeX = 0.0;
GLdouble eyeY = 0.0;
GLdouble eyeZ = -1.0;

GLdouble centerX = 0.0;
GLdouble centerY = 0.0;
GLdouble centerZ = 0.0;

GLdouble upX = 0.0;
GLdouble upY = 1.0;
GLdouble upZ = 0.0;
Проблема в том, что чайник выводится не в предполагаемой мной точке (0,0,0) , а в точке (0,0,-1), то есть на месте размещенной мной камеры, то есть объект выводится не в середине сцены (хотя я делаю последовательность действий
Код:
glPushMatrix();
    glLoadIdentity();
    glColor4d(0.0, 1.0, 1.0, 1.0);
    glutWireTeapot(1.0);
    glPopMatrix();
а объект всегда выводится в координатах (eyeX,eyeY,eyeZ)

Объясните, где я допустил ошибку и в чем она заключается, что я неправильно понимаю

Спасибо
dann.ftk вне форума Ответить с цитированием
Старый 16.07.2012, 08:06   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от dann.ftk Посмотреть сообщение
Проблема в том, что чайник выводится не в предполагаемой мной точке (0,0,0) , а в точке (0,0,-1), то есть на месте размещенной мной камеры,
Если мне не изменыет память, камера ВСЕГДА находится в точке (0,0,0).
Цитата:
Код:
glPushMatrix();
    glLoadIdentity();
    glColor4d(0.0, 1.0, 1.0, 1.0);
    glutWireTeapot(1.0);
    glPopMatrix();
а объект всегда выводится в координатах (eyeX,eyeY,eyeZ)
Насколько я понимаю, первая и последняя строчки никак на приведенный фрагмент кода не влияют, а чайник должен выводиться в начале координат, т.е. вокруг камеры.
Цитата:
Объясните, где я допустил ошибку и в чем она заключается, что я неправильно понимаю

Спасибо
Видите ли, программа работает не так, как ее хотел написать программист, а так, как написал.
Ваша программа - не исключение, она тоже работает, как написана. А если Вы хотите чего-то другого, то неплохо было бы написать, что именно. Мы ведь не телепаты, чтобы суметь догадаться, что Вам на самом деле нужно.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректный вывод результата (1,#J) Drozd Oleg Общие вопросы C/C++ 3 25.09.2011 12:31
Вывод 3d текта в OpenGl adico Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 12.05.2011 18:48
Вывод картинки через OpenGL KIV_95 Помощь студентам 1 15.08.2010 12:18
Некорректный вывод изображения Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 24.07.2010 00:12
OpenGL, функция ругается Seran4ek Мультимедиа в Delphi 5 19.10.2009 16:17