![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
KaraKum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Доброе время суток.
После вызова функции glLoadIdentity() ничего не выводится на экран. Для проверки написал:
Треугольник получается такой гигантский, что должен заполнить весь экран - так и есть, но если перед этим кодом поставить вызов функции glLoadIdentity(), то ничего не рисуется. Скажите, в чём проблема? |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
здесь играют роль две матрицы - GL_MODELVIEW_MATRIX и GL_PROJECTION_MATRIX. Ты в какую загружаешь?
Какие еще преобразования есть в программе, кроме glLoadIdentity()? Добавлено через 1 минуту и 2 секунды Телепатия мне подсказывает, что во вторую, и твой треугольник оказывается за границами отсечения по глубине. Добавлено через 3 минуты и 36 секунд Кстати, из приведенного кода не следует, что треугольник гигантский и что-то должен заполнить. Весь код желательно увидеть. Если только все матрицы у тебя не Identity - тогда на экране единичный куб. |
|||
|
||||
KaraKum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Твоя интуиция - надёжная штука
![]() Вот код:
Периодически нужно сбрасывать предыдущую матрицу и устанавливать новую, но если использовать функции glLoadIdentity() и glTranslatef() вместе, то уже ничего нельзя вывести на экран. |
|||
|
||||
Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
Тебе нужно перед преобразованиями записывать состояния матриц а после преобразований их восстановлять и тогда будет тебе счастье
![]() -------------------- Иногда переменная - это просто переменная |
|||
|
||||
KaraKum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
После
вставил функцию glMatrixMode(GL_PROJECTION); - всё равно ничего не рисуется ![]() И заодно ещё вопросик: почему функция glutTimerFunc(40, ProcessTimerEvent, 1); вызывает функцию ProcessTimerEvent() только один раз, хотя должна делать это 25 раз в секунду? |
|||
|
||||
Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
glPushMatrix();//Запоминаеш состояние преобразований
glLoadIdentity(); //Здесь сбиваеш все преобразования и загружаеш единичную матрицу glTranslatef(...); // твои преобразования но уже отностельно центра... glBegin(GL_TRIANGLES); glColor3f(1, 0, 0); glVertex3f(0, 100, -80); glColor3f(0, 1, 0); glVertex3f(-100, -100, 80); glColor3f(0, 0, 1); glVertex3f(100, -100, 80); glEnd(); glPopMatrix():// восстановляеш состояние преобразований glFlush(); А насчет ProcessTimerEvent(): нужно ее вызывать и в ProcessTimerEvent и также нужно обновлять окно glutPostRedisplay(); -------------------- Иногда переменная - это просто переменная |
|||
|
||||
KaraKum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Изменил код и теперь он выглядит так:
Но всё равно ничего не рисуется! ![]() Насчёт таймера: если я правильно понял, в конце функции ProcessTimerEvent() нужно вызвать glutTimerFunc(40, ProcessTimerEvent, 1); И если так, то плохо, что в таком случае программа пожирает всё процессорное время. |
|||
|
||||
Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
Вот тебе пример твоей програмы, все работает! ![]() Ты задавал очень большие координаты, поэтому триугольник у тебя был большой и ты его не видел -------------------- Иногда переменная - это просто переменная |
|||
|
||||
KaraKum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Вуаля! В InitGL() добавил функцию glMatrixMode(GL_MODELVIEW); и всё заработало!
Большое спасибо ![]() Но с таймером так и не решилось:
Это сообщение отредактировал(а) KaraKum - 14.3.2008, 13:16 |
|||
|
||||
Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: -1 Всего: 5 |
Я ставил 2 таймера, и ничего не пожерало работало отлично и без тормозов! Здесь просто 25 раз в секунду вызывается твоя функция и все...Можеш сделать свой таймер, например через GetTickCount()
-------------------- Иногда переменная - это просто переменная |
|||
|
||||
KaraKum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Да я проверил. Хоть в диспетчере задач и написано, что прога потребляет 100% процессорного времени, но все остальные проги работают нормально, даже проигрыватель.
Вобщем всё что хотел узнать - узнал. Спасибо. Вопрос решён. |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |