Результаты поиска
| |
Archido | Дата: Воскресенье, 07 Октября 2012, 13:53 | Сообщение # 401 | Тема: Wiki по OpenGL :) |
Сэнсэй
Сейчас нет на сайте
| Quote (lumennes) Кстати, стоит ли начать использовать GLUT, или продолжать писать на чистом OpenGL и не заниматься подобной ерундой? Я бы не использовал - самому все написать интереснее
Quote (warzes) Еще один момент, ты юзаешь glTranslate/glRotate/glScale, это плохо Вообще не принципиально, не вижу ничего плохого.
Quote (warzes) Кста, по этой же причине и нехе перестали рекомендовать, ибо сейчас уже так не делают Раньше так тоже никто и никогда не делал, когда дело уходило дальше создания окна и доходило до создания полноценный игры.
Quote (warzes) и ничего полезного знание этих функций не даст Особо полезного не даст (равносильно использованию чужой мат. библиотеки - тоже не даст), но статья будет проще - не нужно ничего знать про матрицы.. и объяснять не нужно, иначе копипаст и непонятки как оно работает.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Воскресенье, 07 Октября 2012, 13:58 |
|
| |
Archido | Дата: Воскресенье, 07 Октября 2012, 13:44 | Сообщение # 402 | Тема: Смешивание текстур в LWJGL |
Сэнсэй
Сейчас нет на сайте
| Если чернобелая - то нужно специально создавать однокомпонентную текстуру и в нее правильно грузить данные (и это наиболее правильный вариант). Для простоты - можно сделать обычную с альфаканалом (4 компоненты) - альфа канал и будет маской.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Пятница, 05 Октября 2012, 09:43 | Сообщение # 403 | Тема: Смешивание текстур в LWJGL |
Сэнсэй
Сейчас нет на сайте
| Окей. Первое, что нужно - это добавить мультитекстурные координаты туда, где создается Chunk: Code //Теперь вместо 'glTexCoord2f(x, y)' надо делать так:
glMultiTexCoord2f(GL_TEXTURE0, ...); //координаты для маски glMultiTexCoord2f(GL_TEXTURE1, ...); //координаты для текстуры, которая будет отрисовываться по данной маске (базовая т.е.) C координатами надо будет поиграться, каким-то полигонам можно поставить все в 0 (чтобы маски на них вообще небыло) и тому подобное.
Самый первый слой по-хорошему нужно рисовать без маски (или с полностью непрозрачной) чтобы сформировать собственно сам ландшафт (тут и в Z буфер надо писать). Как-нить так: Code glActiveTexture(GL_TEXTURE0); //маску отключаем glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0);
glActiveTexture(GL_TEXTURE1); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, BaseTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //отключаем текс. комбайнеры
GL11.glCallLists(chunk.dList[0]);
Теперь, собсна, рендер 2-го и последующих слоев: Code
// тут все точно также с Блендингом и отключением записи в Z буфер
...
//Далее колдунство с текстурными комбайнерами:
glActiveTexture(GL_TEXTURE0); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, AlphaMask); //указываем маску
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE0); glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
glActiveTexture(GL_TEXTURE1); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, BaseTex); //тут основную текстуру
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE1); glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE1); glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_PREVIOUS); glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_PREVIOUS); glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);
GL11.glCallLists(chunk.dList[N]); //рисуем Выглядит все это довольно грустно и так уже почти никто не делает (ибо есть шейдеры).
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Пятница, 05 Октября 2012, 09:43 |
|
| |
Archido | Дата: Пятница, 05 Октября 2012, 09:02 | Сообщение # 404 | Тема: Создание окна Win32 через DLL??! |
Сэнсэй
Сейчас нет на сайте
| Так а в чем проблема то, непонятно как делать? Нужно значит почитать про DLL библиотеки и все сразу станет ясно. Создание окна через DLL ничем не отличается от создания окна, непосредствено, в экзешнике. Отличается только способ вызова ф-ций.
В кратце, при создании DLL в дополнении создается и .lib файл, который используется для связывания ф-ций, находящихся в DLL, с твоим приложением. Обычно кроме этого существует еще и хедер (.h) с объявлением экспортируемых (а на другой стороне - импортируемых) ф-ций.
Например есть некий Header.h, в нем такой код: Code #define ENGINE_API __stdcall #define ENGINE_EXPORT extern "C" __declspec(dllexport) #define ENGINE_IMPORT extern "C" __declspec(dllimport)
#ifdef ENGINE_HEADER_ONLY //Обявляется в приложении ENGINE_IMPORT bool ENGINE_API Intialize (int Width, int Height); #else ENGINE_EXPORT bool ENGINE_API Intialize (int Width, int Height); #endif По умолчанию если заинклудить данный хедер, то будет объявлена ф-ция Initialize в качестве эскпортируемой из движка (и использовать ее можно только в DLL движка ). В приложении перед инклудом данного хедера объявляется директива ENGINE_HEADER_ONLY и в результате ф-ция объявится как импортируемая (из DLL), а чтобы оно нашло реализацию этой ф-ции - нужно прилинковать одноименный .lib файл. И можно будет легко звать эту ф-цию из DLLки.
В самом движке она реализуется обычно (например какой-нить Core.cpp): Code #include "Header.h"
bool ENGINE_API Intialize (int Width, int Height) {
//тут обычный код, который создает окно. И з приложение эта ф-ция легко дергается.
}
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Пятница, 05 Октября 2012, 09:04 |
|
| |
Archido | Дата: Четверг, 04 Октября 2012, 17:40 | Сообщение # 405 | Тема: Работы в 3D |
Сэнсэй
Сейчас нет на сайте
| Modelkin Ок, понял, спасибо. И форма буханки - это верно подмечено
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Четверг, 04 Октября 2012, 17:38 | Сообщение # 406 | Тема: Смешивание текстур в LWJGL |
Сэнсэй
Сейчас нет на сайте
| Можно скрин ландшафта с текстурами + скрин его же во wireframe режиме, так чтобы все очевидно было. И что конкретно подразумевается под мелкими деталями (они точно нужны в RTS?) ? Ну а вообще, если разрешения сетки не хватает на такие вещи, то выход только один - использовать маски (либо альфаканал, но маски в разы гибче). Делаются они в OpenGL без шейдеров с помощью мультитекстурирования (вторые. текс. координаты для масок) и текстурных комбайнеров (это чтобы смешать основную текстуру и альфа маску), тут уже ограничений практически нет - маску можно брать любого разрешения (зависит от необходимой детализации) и можно размещать ее в любом месте и на любых полигонах (настраивается вторыми текс. координатами)... Могу, в принципе, подробнее рассказать. А смешать с помощью альфы вершин вообще получилось, да?
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Четверг, 04 Октября 2012, 13:28 | Сообщение # 407 | Тема: помощь в разработке движка |
Сэнсэй
Сейчас нет на сайте
| Сейчас у вас все рисуется без индекс буфера, хоть и определение его есть. Поэтому нужно изменить порядок следования вершин в их же массиве, как-то так: Code HRESULT InitVertBuff() { //проектируем вертексный буфер CUSTOMVERTEX Vertex[] = { { 1.0f,-1.0f, 1.0f, 0x00ff00ff, }, //А { -1.0f, 1.0f, 1.0f, 0x00ff00ff, }, //С { -1.0f,-1.0f, 1.0f, 0x00ff00ff, }, //В { -1.0f, 1.0f, 1.0f, 0x00ff00ff, }, //C { 1.0f,-1.0f, 1.0f, 0x00ff00ff, }, //A { 1.0f, 1.0f, 1.0f, 0x00ff00ff, }, //D
{ -1.0f,-1.0f, 1.0f, 0x000000ff, }, //А2 { -1.0f, 1.0f,-1.0f, 0x000000ff, }, //С2 { -1.0f,-1.0f,-1.0f, 0x000000ff, }, //В2 { -1.0f, 1.0f,-1.0f, 0x000000ff, }, //C2 { -1.0f,-1.0f, 1.0f, 0x000000ff, }, //A2 { -1.0f, 1.0f, 1.0f, 0x000000ff, }, //D2
{ 1.0f,-1.0f,-1.0f, 0xffffff00, }, //А3 { -1.0f,-1.0f,-1.0f, 0xffffff00, }, //В3 { -1.0f, 1.0f,-1.0f, 0xffffff00, }, //С3 { -1.0f, 1.0f,-1.0f, 0xffffff00, }, //C3 { 1.0f, 1.0f,-1.0f, 0xffffff00, }, //D3 { 1.0f,-1.0f,-1.0f, 0xffffff00, }, //A3
{ 1.0f,-1.0f,-1.0f, 0x00ff0000, }, //А4 { 1.0f, 1.0f, 1.0f, 0x00ff0000, }, //С4 { 1.0f,-1.0f, 1.0f, 0x00ff0000, }, //В4 { 1.0f, 1.0f, 1.0f, 0x00ff0000, }, //C4 { 1.0f,-1.0f,-1.0f, 0x00ff0000, }, //A4 { 1.0f, 1.0f,-1.0f, 0x00ff0000, }, //D4
{ 1.0f, 1.0f, 1.0f, 0x00000fff, }, //А5 { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //С5 { -1.0f, 1.0f, 1.0f, 0x00000fff, }, //В5 { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //C5 { 1.0f, 1.0f, 1.0f, 0x00000fff, }, //A5 { 1.0f, 1.0f,-1.0f, 0x00000fff, }, //D5
{ 1.0f,-1.0f, 1.0f, 0x00000fff, }, //А6 { -1.0f,-1.0f, 1.0f, 0x00000fff, }, //В6 { -1.0f,-1.0f,-1.0f, 0x00000fff, }, //С6 { -1.0f,-1.0f,-1.0f, 0x00000fff, }, //C6 { 1.0f,-1.0f,-1.0f, 0x00000fff, }, //D6 { 1.0f,-1.0f, 1.0f, 0x00000fff, }, //A6 };
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Четверг, 04 Октября 2012, 13:29 |
|
| |
Archido | Дата: Четверг, 04 Октября 2012, 12:55 | Сообщение # 408 | Тема: помощь в разработке движка |
Сэнсэй
Сейчас нет на сайте
| Так я и говорю - правильно обходить вершины нужно (в индексном буфере порядок вершин изменить). Собственно, D3DCULL_ССW говорит, что лицевые грани - это такие, у которых обход вершин сделан по часовой стрелке... А сейчас одна часть сделана по часовой, другая против часовой - вот кулинг нормально и не работает.
Добавлено (04.10.2012, 12:55) --------------------------------------------- А, сейчас посмотрел - индексы при отрисовке вообще не используются, тогда нужно просто изменить порядок вершин в массиве.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Четверг, 04 Октября 2012, 13:14 |
|
| |
Archido | Дата: Четверг, 04 Октября 2012, 12:12 | Сообщение # 409 | Тема: Смешивание текстур в LWJGL |
Сэнсэй
Сейчас нет на сайте
| Quote (miker9) Если использовать вершины для прозрачности получается не очень гладко. Ну, если иметь в распоряжении несколько текстур разных видов поверхности (трава, песок, земля, etc) и хорошенько их затайлить (так, чтобы на одном патче в 32х32 полигонов оказалось 50 - 150 текстур), то смешивая разные текстуры - можно получить очень хорошие результаты . Я в прошлом посте две картинки приводил для примера, такой результат не устраивает?
Если на каждый патч используется одна большая текстура, то чтобы ее плавно смешать с такой же другой - нужно юзать у последней альфаканал. Но тогда получится, что на патч - будет свой уникальный альфаканал и соотвественно уникальная текстура (с уникальным рисунком)... Тогда что-то смешивать вообще смысла не имеет и можно заранее запечь все слои для N-го патча (фотошоп, редактор) в одну текстуру и ее использовать. Единственное, что на такое дело потребуется много памяти под текстуры, поэтому если ландшафт большой - то такое просто вообще не взлетит.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Четверг, 04 Октября 2012, 11:41 | Сообщение # 410 | Тема: помощь в разработке движка |
Сэнсэй
Сейчас нет на сайте
| Проблема в криво отрисовывающихся сторонах бокса? Если да, то проблема в порядке обхода вершин (в индексном буфере). Можно отключить Back Face Culling, сделав:Code pDirect3DDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE); тогда все отрисуется нормально.
По умолчанию (и сейчас в коде) стоит D3DCULL_ССW, поэтому чтобы правильно все отрисовать нужно обходить вершины по часовой стрелке (для каждого треугольника).
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Четверг, 04 Октября 2012, 11:42 |
|
| |
Archido | Дата: Четверг, 04 Октября 2012, 10:52 | Сообщение # 411 | Тема: Работы в 3D |
Сэнсэй
Сейчас нет на сайте
| Modelkin Большое спасибо за информацию
Это не совсем первая модель , а первая модель подобной сложности. Чуть раньше я делал какие-то простые вещи и потихоньку познавал премудрости данного дела (знания в основном только теоретические) и вот решил сделать уже что-то посложнее, хорошенько попрактиковаться таки
Quote (Modelkin) На мой вгляд - слишком большие и продолжительные поверхности с нулевым вектором. Будет работать в минус, особенно при направленном(солнышке) освещении, зальет светом плоскость - получится картон, в лучшем случае - навазелиненный картон Ваша правда, уже неоднакратно наблюдал такую весч , в планах ближе к окончанию работы добавить немного "помятых" листов вдоль боковых сторон, которые как раз и будут образовывать швы в местах их стыка + сами листы неоднородной поверхности. Должно помочь? И можно чуть подробнее про вариант "сделать модель чуть-чуть шестиугольной с торца" - а то я что-то не соображу как оно сможет помочь. Спасибо.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Среда, 03 Октября 2012, 17:00 | Сообщение # 412 | Тема: Работы в 3D |
Сэнсэй
Сейчас нет на сайте
| Quote (shaman4d) А сетку поезда показать? Можно и показать, рендерить с сеткой не умею, поэтому просто скрин: _ Сетка решеток (зеленая) сильно алиасится, ибо мелкие детали очень. Модель хайполи и в теории пойдет под нормал мап (если не надоест), сетка кое-где чутка кривая
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Среда, 03 Октября 2012, 17:01 |
|
| |
Archido | Дата: Среда, 03 Октября 2012, 16:23 | Сообщение # 413 | Тема: Работы в 3D |
Сэнсэй
Сейчас нет на сайте
| Смотрю программисты тоже учатся моделить и выкладывают свои поделки , решил тоже выложить свое чудо...
Часто наблюдаю за работой знакомого моделлера, поэтому эту кухню немного знаю, а после недавней его работы с тепловозом я решил запилить свой с ... ну вы поняли Можно сказать - что это моя первая более ли менее сложная модель, поэтому пока ничего особенного: _ _ _
В планах допилить телегу и накинуть деталей, сделать наконец-то нормальную крышу и добавить деталей на морду.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Среда, 03 Октября 2012, 16:25 |
|
| |
Archido | Дата: Среда, 03 Октября 2012, 08:55 | Сообщение # 414 | Тема: Смешивание текстур в LWJGL |
Сэнсэй
Сейчас нет на сайте
| Quote (miker9) Проблема в том что обе текстуры квадратные. А в чем тут проблема?
В данный момент, судя по коду, у тебя целая полноценная текстура кладется на патч (32х32)? Ее можно затайлить и класть, скажем, 8х8 текстур на патч или даже больше, указав нужное кол-во в glTexCoord2f (где там сейчас стоит 1, указать 8 например) и смешиванием всего этого дела в два слоя можно делать что-то вроде этого - 1 и 2
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Вторник, 02 Октября 2012, 05:39 | Сообщение # 415 | Тема: Множественные ошибки при компиляции приложения на HGE |
Сэнсэй
Сейчас нет на сайте
| Woolfo А у тебя, кстати, какая версия HGE - 1.8.1 (последняя) ? У меня Code::Blocks + GCC спокойно все скомпилил с единственной "libhge.a", ранние версии вроде требовали еще одну, о которой Нохчи написал. В офф. документации даже есть инфа как настраивать HGE в Dev C++
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Вторник, 02 Октября 2012, 05:39 |
|
| |
Archido | Дата: Вторник, 02 Октября 2012, 05:23 | Сообщение # 416 | Тема: Смешивание текстур в LWJGL |
Сэнсэй
Сейчас нет на сайте
| Мм, дисплей листы я бы посоветовал в процессе (или в близжайшем будущем) заменить на VBO (1, 2, 3) - оно быстрее и более гибко.
Допустим, нам нужно смешать два слоя. Для простоты (чтобы суть понять) - первым способом. Чтобы это сделать, нужно для второго слоя хранить информацию о том, в каких местах его видно, а в каких нет (прозрачность). Хранить будем в цвете вершины, для этого нужно каждому слою задавать свой glColor4f (1, 1, 1, Alpha), поэтому в данный момент придется клонировать дисплей листы (с информацией о вершинах и текс. координатах, они будут одинаковы для всех слоев) и в каждом задавать свой Color. Например, превратить член dList класcа Chunk в массив, где chunk.dList[N] номер слоя и в цикле для каждого такого слоя строить собственный дисплей лист. Альфу можно задавать любыми способами, для теста взять 0.5 например (для второго слоя, для первого она всегда равна 1), или лучше рандом даже.
Как примерно может выглядеть процесс отрисовки: Code //Сначало обычным способом рисуется первый слой ...
GL11.glBindTexture (...); //первая текстура GL11.glCallLists(chunk.dList[0]);
...
//теперь рисуем второй слой, тут нужно поколдовать с Blend и Depth
GL11.glDepthMask(GL11.GL_FALSE); //Отрубаем запись в Z-Buffer GL11.glDepthFunc(GL11.GL_LEQUAL); //Т.к. у нас уже глубина ландшафта записана при отрисовке первого слоя, то устанавливаем ф-цию сравнения этой глубины в EQUAL, чтобы тест всегда проходило. По идее, если ландшафт рисуется одним из первых, то можно вообще воткнуть glDepthFunc(GL_ALWAYS) и будет еще лучше.
GL11.glEnable(GL11.GL_BLEND); //Включаем смешивание GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); //это формула смешивания. Result = Texture1 * Layer2.Alpha + Texture2 * (1 - Layer2.Aplpha);
//рисуем второй слой GL11.glBindTexture (...); //вторая текстура GL11.glCallLists(chunk.dList[1]);
...
//и возвращаем все в изначальное положение
GL11.glDepthMask(GL11.GL_TRUE); GL11.glDepthFunc(GL11.GL_LESS);
GL11.glDisable(GL11.GL_BLEND);
Примерно так
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Понедельник, 01 Октября 2012, 18:04 | Сообщение # 417 | Тема: Смешивание текстур в LWJGL |
Сэнсэй
Сейчас нет на сайте
| Шейдеров совсем нету да? Это печально в нынешние времена, т.к. с ними много вещей проще делается.
Если нужно делать ландшафт, то обычно его делают тайлингом нескольких различных текстур (слои, да) и смешиванием между ними, сплаттинг называется. Насколько понимаю - это и нужно. Чтобы смешать слои, нужно где-то брать для каждого коэффициент смешивания между ними (если точнее, то прозрачность конкретного слоя в каждой вершине ландшафта). Брать это можно либо из вершины, либо накладывать специальную дополнительную текстурку (маску)... Первое делается проще, второе сложнее (без шейдеров).
Конкретнее могу рассказать (завтра уже, правда), если будет известно, готово ли сейчас что-либо из ланшдшафта и как оно рисуется. Кодом.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Понедельник, 01 Октября 2012, 18:04 |
|
| |
Archido | Дата: Понедельник, 01 Октября 2012, 14:31 | Сообщение # 418 | Тема: Смешивание текстур в LWJGL |
Сэнсэй
Сейчас нет на сайте
| Как вариант - сделать у красной альфа канал. Хотя... т.е. коричневая тайлится, а красная просто поверх накладывается с неким рисунком? Тогда не очень вариант... Вообще такое легко делается по маске, когда есть шейдеры , но можно и блендингом по идее, в два прохода.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Понедельник, 01 Октября 2012, 14:35 |
|
| |
Archido | Дата: Понедельник, 01 Октября 2012, 04:41 | Сообщение # 419 | Тема: Множественные ошибки при компиляции приложения на HGE |
Сэнсэй
Сейчас нет на сайте
| Quote (Woolfo) Может быть DevC++ не совместим с hge?У меня уже мозг вскипел от того, что hge не работает. Совместим, возможно просто ты не ту библиотеку прилинковал. Dev C++ использует GCC компилятор и нужно прилинковать только единственную "libhge.a" и никакие другие.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Воскресенье, 30 Сентября 2012, 17:31 | Сообщение # 420 | Тема: Вики по DirectX 11 |
Сэнсэй
Сейчас нет на сайте
| Т.е. у тебя что указатель на кусок памяти, что указатель на объект (у которого можно дергать ф-ции и менять его состояние) - вся одна фигня. А если нет наследования, то нет и ООП. Окей, считай как хочешь. Спорить не хочу.
Изначально речь была о том почему OpenGL считается легче для новичков, давай тогда по-другому скажу. В DX'e тебе после создания ресурсов выдаются указатели на объекты, которые можно легко угробить. За ними надо следить - когда хранишь, копируешь в разные места... чтобы не вызвать метод по невалидному указателю или передать последний в метод другого объекта. Ну и как-то грамотно их нужно удалять, когда не нужны. Сложновато. В OpenGL тебе на руки дают хендл, который можно в сотне разных мест хранить, передавать его в любую ф-цию, даже если его уже давно удалили. И все будет путем.
Да и не нужно знать, что такое динамическая память и классы, что есть у них какие-то методы и так далее. Все проще.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Воскресенье, 30 Сентября 2012, 17:34 |
|
| |
|