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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2010, 14:44   #11
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Используйте все что хотите и как хотите.
Никто вам нормативов не пишет, как правильно, а как нет.
Лишь бы вам легко писалось и в дальнейшем путаницы не вызывало.
ООП, наследование, перегрузку ф-й либо просто процедурное программирование– все что сочтете уместным используйте - я не думаю, что механика языка будет самым узким местом в программе.
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 17.12.2010, 15:38   #12
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Главное правило - не делать действий ради самих действий. Выносите все статические коды за циклы, если ничего не меняется, то и не нужно выполнять это в цикле (как было с текстурами, которые не меняются, но грузятся в цикле).
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.12.2010, 19:22   #13
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Мне кажется, что по сравнению с тем, что обычно тормозит в наших программах, виртуальные функции с наследованием и прочие примочки ООП будут абсолютно незаметны.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 20.12.2010, 12:32   #14
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Итак, вот релиз, более менее похожий на игру. Пока можно ходить сквозь стены. Есть загрузка уровней и моделей из текстового файла. На каждом уровне надо дойти от синей штуки до красной штуки. Так и не разобрался с тестом глубины, стены мерцают и не отсекаются по глубине. Прошу помочь, кто чем может. Необходимо, в первую очередь, реализовать физику (чтобы не было проникновения сквозь стены) и тест глубины. Спасибо
Вложения
Тип файла: rar fezel.rar (409.0 Кб, 33 просмотров)
anyx вне форума Ответить с цитированием
Старый 20.12.2010, 15:56   #15
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Считай расстояние от точки до поверхности(камера-треугольник) и если эта величина < любого R(рост перса...) то выталкивай эту сферу по направлению нормали...(Самый простой способ...)
PS: лень грузить пол метра...
PSS: скачал, ох не люблю когда функции без скобок пишут, часто путаюсь где функция, где переменная...

FTexture: PPixelArray;
Лишнее, достаточно загрузить текстуру в видеопамять и хранить только ее id, все остальные данные долой delete[];

Я нигде не увидел включения буфера глубины(или я ослеп)...

glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LEQUAL);
glClearDepth(1.0f);
__________________

Код:
procedure TTexture.Select;
begin
  if FTexture <> nil then
    glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_RGB, GL_UNSIGNED_BYTE, FTexture);
end;
И
Код:
for i := 0 to High(Level.Walls) do
  begin
    Level.Walls[i].Texture.Select;
...
ЫЫЫ!!!!!!!111
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, width, height, GL_BGRA, GL_UNSIGNED_BYTE, data );
...
а в select писать glBindTexture(GL_TEXTURE_2D, id);

Последний раз редактировалось Kostia; 20.12.2010 в 16:24.
Kostia вне форума Ответить с цитированием
Старый 20.12.2010, 16:53   #16
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Код:
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LEQUAL);
glDepthRange(0.0, 1.0);
glClearDepth(1.0);
Не нашел куда вставить и подставил прямо в рендер – «procedure TScene.Render»
Стало меньше мельканий… но все-таки еще есть.
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 20.12.2010, 19:03   #17
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Пришлось вручную грузить функции:
Код:
procedure glGenTextures(n: GLuint; textures: PGLuint); stdcall; external opengl32 name 'glGenTextures';
procedure glBindTexture(target: GLuint; texture: GLuint); stdcall; external opengl32 name 'glBindTexture';
В OpenGL.pas не нашел...
Вложения
Тип файла: rar fezel.rar (231.5 Кб, 12 просмотров)
Kostia вне форума Ответить с цитированием
Старый 21.12.2010, 13:16   #18
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Мерцание устранил. Надо было третьим параметром в gluPerspective передавать не 0, а 0.01.

Код лля работы с текстурами пока старый. Сегодня переделаю. Функции glGenTextures и glBindTexture должны быть в альтернативных заголовочных файлах gl.pas и glu.pas.

Спасибо за помощь

Выкладываю текущую версию, пусть это будет build 0002.

P.S. С диска книги Библия Delphi взял OpenGL 4.0 и заголовочные файлы для него. Там есть все нужные функции.
P.P.S. Неправда, это был не OpenGL 4.0, поэтому удаляю. Я сам не понял, с этими заголовочниками какая-то фигня...
Вложения
Тип файла: rar fezel.rar (406.2 Кб, 16 просмотров)

Последний раз редактировалось anyx; 22.12.2010 в 12:44.
anyx вне форума Ответить с цитированием
Старый 21.12.2010, 13:34   #19
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Несколько замечаний по геймплею:
1. Движение происходит слишком быстро - не вылететь за пределы комнаты можно только если перемещаться очень аккуратно, по одному шагу туда-сюда.
2. Не слишком удобно управлять клавишами-стрелками, т.к. правая рука лежит на мышке, а левая вынуждена тянуться к правой стороне клавиатуры. С WASD было бы удобней, на мой взгляд.
3. При щелчке левой кнопкой появляется окно с ошибкой "Abstract Error"
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 21.12.2010, 13:44   #20
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
1. Движение происходит слишком быстро - не вылететь за пределы комнаты можно только если перемещаться очень аккуратно, по одному шагу туда-сюда.
Я собираюсь поставить на форму таймер. Графика будет рендериться в процедуре ожидания (FormIdle), а ввод будет обрабатываться в процедуре таймера.

Цитата:
Сообщение от Гром Посмотреть сообщение
2. Не слишком удобно управлять клавишами-стрелками, т.к. правая рука лежит на мышке, а левая вынуждена тянуться к правой стороне клавиатуры. С WASD было бы удобней, на мой взгляд.
Потом сделаю настройку клавиш управления.

Цитата:
Сообщение от Гром Посмотреть сообщение
3. При щелчке левой кнопкой появляется окно с ошибкой "Abstract Error"
Нет обработчика щелчка мыши (точнее он абстрактный). Пока рано над этим работать.

Цитата:
Сообщение от Kostia Посмотреть сообщение
Я нигде не увидел включения буфера глубины(или я ослеп)...
В проекте много модулей. Возможно, что помещение некоторого кода мной в определённый модуль покажется вам нелогичным. Если так, то сообщайте, я подумаю...

Инициализирую графику я в TGraphic.FormCreate, а устанавливаю параметры (в том числе и буфер глубины) в TScene.FormCreate

Последний раз редактировалось anyx; 22.12.2010 в 13:38.
anyx вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ничего себе... 3D шутер... mihali4 Gamedev - cоздание игр: Unity, OpenGL, DirectX 91 21.05.2011 13:29