Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизПроверка столкновений Найти похожие ветки
← →
Sword-Fish © (2003-10-04 00:35) [0]Доброй ночи ВАМ !!!
Не могли бы вы мне ответить вот на какой вопрос:
Я пишу шутер на чистом WIN API (на OpenGL) и загружаю уровень вот так из файла:
******************************************************
type
TCoord = Record
X, Y, Z : glFLoat;
end;
TFace = Record
V1, V2, V3, V4 : Integer;
U, V : glFloat;
TextureIndex : Integer;
end;
var
Texture : Array of glUint;
TextureCount : Integer;
VertexCount : Integer;
FaceCount : Integer;
Vertex : Array of TCoord;
Face : Array of TFace;
procedure LoadMap;
var F : Textfile;
Tex : Array of String;
S : String;
I, J : Integer;
begin
AssignFile(F, "Demo.fzm");
Reset(F);
// Load the textures
Readln(F, TextureCount);
SetLength(Tex, TextureCount);
SetLength(Texture, TextureCount);
for I :=0 to TextureCount-1 do
begin
Readln(F, S);
Tex[i] :=Copy(S, 1, Pos(" ", S)-1);
S :=Copy(S, Pos(" ", S)+1, length(S));
LoadTexture(S, Texture[i],false);
end;
// Load the vertices
Readln(F, VertexCount);
SetLength(Vertex, VertexCount);
for I :=0 to VertexCount-1 do
Readln(F, Vertex[i].X, Vertex[i].Y, Vertex[i].Z);
// Load the faces
Readln(F, FaceCount);
SetLength(Face, FaceCount);
for I :=0 to FaceCount-1 do
begin
Readln(F, Face[i].V1, Face[i].V2, Face[i].V3, Face[i].V4, Face[i].U, Face[i].V, S);
S :=Trim(Copy(S, 1, 12));
for J :=0 to TextureCount-1 do
if Tex[J] = S then
Face[i].TextureIndex :=J;
end;
CloseFile(F);
end;
******************************************************
И потом отрисовываю его в процедуре отрисовки экрана:
For I :=0 to FaceCount-1 do
with face[i] do
begin
glBindTexture(GL_TEXTURE_2D, Texture[TextureIndex]);
glBegin(GL_QUADS);
glTexCoord(0, 0); glVertex3fv(@Vertex[V1-1]);
glTexCoord(U, 0); glVertex3fv(@Vertex[V2-1]);
glTexCoord(U, V); glVertex3fv(@Vertex[V3-1]);
glTexCoord(0, V); glVertex3fv(@Vertex[V4-1]);
glEnd();
end;
******************************************************
Ну вообщем у меня есть моя координата x,y,z и я нажимая стрелки на клаве могу двигаться и вертеть головой мышью а мне надо чтобы и сквозь стены не проходил !!!
Как мне связать текущие координаты и координаты стен и всего другого ?
Или есть более легкий способ загрузки уровней в игре и отслеживанию столкновений ?
Заранее СПАСИБО ОГРОМНОЕ !!!
← →
Sword-Fish © (2003-10-04 11:04) [1]Ну кто-нибудь помогите мне, пожалуйста !!!
Мне это очень надо ...
Ну пожалуйста ответьте кто-нить ???
← →
Sapersky © (2003-10-04 11:06) [2]Вообще-то и проверять столкновения,и рисовать удобнее и быстрее, если уровень представляет собой не просто кучу полигонов, а какую-то упорядоченную структуру. Существует много методов - различного рода деревья (BSP-tree, octtree), порталы (portals), PVS (potentially visible sets). См., например, http://www.delphi3d.net/articles.php
Если уж не хочется с этим разбираться, можно сделать простую проверку на пересечение вектора направления камеры (точнее, луча) со всеми полигонами. Если пересеклись и расстояние до полигона меньше определённого значения, значит, упираемся в стену. Но будет уровень чуть побольше - и тормоза обеспечены, и при проверке, и при прорисовке.
← →
Sword-Fish © (2003-10-04 11:36) [3]Спасибо за ответ !!!
А есть что-нибудь на русском и попроще чуть-чуть ???
← →
Sapersky © (2003-10-04 11:53) [4]http://www.gamedev.ru
Но там на C++ :)
← →
Sword-Fish © (2003-10-04 11:53) [5]А может есть готовый примерчик для загрузки bsp-уровней в мою игру и проверки там столкновений, а то я однажды нашел в нете такой примерчик: карта из КВАКИ 2, помоему, грузилась и там проверялись collision"s (комнатка такая небольшая и лестница) !!!
А то я с другом решил заняться созданием игры вплотную и вложиться в это дело хорошенько ...
← →
Sapersky © (2003-10-04 12:08) [6]ИМХО, по статье проще разбираться, чем по исходникам, поэтому я всё-таки рекомендую GameDev (там в новостях прямо перед носом будет ссылка на статью).
Примеры на Дельфи:
http://www.cs.sun.ac.za/~henri/advgfx.html
← →
Landgraph (2003-10-05 14:33) [7]Еще вариант, тормознутый правда:
Проверять, перед перемещением в точку, принадлежит ли эта точка какому-либо треугольнику пола или нет. Если нет - тогда никуда не идем.
Но тогда надо разграничивать треугольники пола и всего остального (в принципе ничего сложного). И, опять же, желательно сначала определить - виден ли треугольник или нет.
← →
VitGun © (2003-10-06 17:06) [8]2 Sapersky. ОГРОМНОЕ. ВСЕЛЕНСКОЕ НЕЧЕЛОВЕЧЕСКОЕ СПАСИБО ЗА ССЫЛКУ. Я мучался с BSP-collision месяц, но так ничего и не добился.
З.Ы. Сорри за флейм...
← →
Sword-Fish © (2003-10-07 00:11) [9]Спасибо ВАМ большое за ссылку на примеры по Delphi !!!
Все просто классно (спасибо еще раз) !!!
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.053 c