Сообщения на форуме пользователя Andrey (252 стр.)
Проблема со столкновениями | 14 сен. 2004 | 8:43 | #18 |
---|
D0cent
А мой код в посте 5 и 6 там абсолютно все что нужно.
dimanizmpp
А у тебя код такой-же ? или другой?
Вот так я загружаю массив из файла:
А мой код в посте 5 и 6 там абсолютно все что нужно.
dimanizmpp
А у тебя код такой-же ? или другой?
Вот так я загружаю массив из файла:
//Загрузка вершин void ListScene::LoadVertex() { //Имя файла для загрузки уровня const char* FileName = "data\\level.raw"; _log -> Report("Загрузка пробного уровня из файла ", _OK); _log -> Report(FileName, NO_TIME); ifstream in; //Число вершин в сцене int i = 0; //Временная переменная для чтения вершин float temp; vertex = 0; in.open(FileName,ios::in); if (!in) { _log -> Report("Не удалось открыть файл ", NO_TIME_ERROR); _log -> Report(FileName, NO_TIME); return;//Не удалось открыть файл } //Узнаем число вершин while(!in.eof()) { //Читаем вершины временно in >> temp; vertex++; } in.close(); Vertex = new Vector3D[vertex];//Выделяем памяит под массив in.open(FileName,ios::in); in.seekg(0, ios::beg);//Устанавливаем на начало позиции файла //Читаем вершины while(!in.eof()) { in >> Vertex[i].x >> Vertex[i].y >> Vertex[i].z; i++; } _log -> Report(" Ok\n", NO_TIME); }
[/b]
Правка: 14 сен. 2004 8:44
Проблема со столкновениями | 13 сен. 2004 | 16:16 | #15 |
---|
Есть у кого нибудь еще какие-нибудь идеи?
Подсчет FPS | 13 сен. 2004 | 14:38 | #3 |
---|
BAMC
>таймера стаятся в очередь на обработку, если у меня будет много других сообщений и.т.п >грузни, то все пойдет неправильно FPS будет скакать...
Пробуй прошедшее время вычислять с помощью функции time() тогда не будет привязки к сообщению от таймера WM_TIMER.
>таймера стаятся в очередь на обработку, если у меня будет много других сообщений и.т.п >грузни, то все пойдет неправильно FPS будет скакать...
Пробуй прошедшее время вычислять с помощью функции time() тогда не будет привязки к сообщению от таймера WM_TIMER.
Хороший сайт | 13 сен. 2004 | 11:38 | #22 |
---|
-=InQ=-,wat
Я уже говорил что сайт просто супер.Я как на работу прихожу первым делом сюда заглядываю.Спасибо сбольшое создателям и разработчикам!!!
Я уже говорил что сайт просто супер.Я как на работу прихожу первым делом сюда заглядываю.Спасибо сбольшое создателям и разработчикам!!!
Правка: 13 сен. 2004 11:46
Предложение создать отдел посвящённый разработке игр для мобильников | 13 сен. 2004 | 11:20 | #13 |
---|
Я поддерживаю.
Модели.. | 13 сен. 2004 | 9:40 | #4 |
---|
An-v1
А в Ase хорошо анимация поддерживается?Я вот пробовал занятся этим но про формат Ase для анимации говорили что он не полностью ее поддерживает.
А в Ase хорошо анимация поддерживается?Я вот пробовал занятся этим но про формат Ase для анимации говорили что он не полностью ее поддерживает.
Проблема со столкновениями | 13 сен. 2004 | 9:33 | #14 |
---|
JK Viking,Uranius
Ну спасибо всем буду думать.А как нибудь без физики можно ну хотя-бы пока?
А то слишком это сложно, я ее просто всю забыл.А как объяснть что в том исходнике не трясется?Может тут дело в скорости перемещения?Хотя я пробовал менять в том исходнике и все работает!!!И там тоже нет физики.
Ну я еще подумаю потом напишу.Спасибо еще раз всем
Ну спасибо всем буду думать.А как нибудь без физики можно ну хотя-бы пока?
А то слишком это сложно, я ее просто всю забыл.А как объяснть что в том исходнике не трясется?Может тут дело в скорости перемещения?Хотя я пробовал менять в том исходнике и все работает!!!И там тоже нет физики.
Ну я еще подумаю потом напишу.Спасибо еще раз всем
Проблема со столкновениями | 11 сен. 2004 | 14:25 | #11 |
---|
Народ откликнитесь!!!!
Glut и .net 2003 | 11 сен. 2004 | 12:41 | #1 |
---|
FireSol
Попробуй по шагам отладить.
Попробуй по шагам отладить.
Правка: 11 сен. 2004 12:41
Проблема со столкновениями | 11 сен. 2004 | 10:56 | #10 |
---|
Uranius
>Так, чтоп. А что у тебя не работает-то? Ты комп включил?:) если да, то как оно не работает?
>Так, чтоп. А что у тебя не работает-то? Ты комп включил?:) если да, то как оно не работает?
Ну хватит прикалываться.У меня вчера почти получилось.Я проверку столкновений поставил после
метода перемещения камеры.Но теперь получаются что тебя очень трясет после столкновений.Не знаешь в чем дело?
Проблема со столкновениями | 10 сен. 2004 | 16:03 | #8 |
---|
Uranius
Премещение камеры у меня происходит в фоновом цикле при обработке событий.
в методе перемещения камеры проверяется нажатие соответствующей клавиши.
А столкновения(коллизию) проверяю при отривсовке:
//Отображение сцены void Render::DrawScene() { //... camera -> UpdateMatrix();//Вот тут обновляю матрицу камеры //... //Проверка столкновений CheckCollision(listScene -> GetVertex(), listScene -> GetNumberVertex()); //... } |
Правка: 10 сен. 2004 16:04
opengl.org.ru | 10 сен. 2004 | 13:23 | #3 |
---|
azazello
А знаю такого Книгу написал Основы OpenGL а не знаешь где он сейчас?Графикой еще занимается?
А знаю такого Книгу написал Основы OpenGL а не знаешь где он сейчас?Графикой еще занимается?
Проблема со столкновениями | 10 сен. 2004 | 12:33 | #6 |
---|
А теперь сама функция проверки столкновений:
//Проверка столкновений void CheckCollision(Vector3D *Vertices, int numOfVerts) { for(int i = 0; i < numOfVerts; i += 3) { // Store of the current triangle we testing Vector3D Triangle[3] = {Vertices[i], Vertices[i+1], Vertices[i+2]}; // 1) STEP ONE - Finding the sphere's classification // We want the normal to the current polygon being checked Vector3D normal = Normal(Triangle); // This will store the distance our sphere is from the plane float distance = 0.0f; Vector3D Position = camera -> GetPosition(); // This is where we determine if the sphere is in FRONT, BEHIND, or INTERSECTS the plane int classification = ClassifySphere(Position, normal, Triangle[0], radius, distance); // If the sphere intersects the polygon's plane, then we need to check further if(classification == INTERSECTS) { // 2) STEP TWO - Finding the psuedo intersection point on the plane // Now we want to project the sphere's center onto the triangle's plane Vector3D Offset = normal * distance; // Once we have the offset to the plane, we just subtract it from the center // of the sphere. "vIntersection" is now a point that lies on the plane of the triangle. Vector3D Intersection = Position - Offset; // 3) STEP THREE - Check if the intersection point is inside the triangles perimeter // We first check if our intersection point is inside the triangle, if not, // the algorithm goes to step 4 where we check the sphere again the polygon's edges. // We do one thing different in the parameters for EdgeSphereCollision though. // Since we have a bulky sphere for our camera, it makes it so that we have to // go an extra distance to pass around a corner. This is because the edges of // the polygons are colliding with our peripheral view (the sides of the sphere). // So it looks likes we should be able to go forward, but we are stuck and considered // to be colliding. To fix this, we just pass in the radius / 2. Remember, this // is only for the check of the polygon's edges. It just makes it look a bit more // realistic when colliding around corners. Ideally, if we were using bounding box // collision, cylinder or ellipses, this wouldn't really be a problem. if(InsidePolygon(Intersection, Triangle, 3) || EdgeSphereCollision(Position, Triangle, 3, radius / 2)) { // If we get here, we have collided! To handle the collision detection // all it takes is to find how far we need to push the sphere back. // GetCollisionOffset() returns us that offset according to the normal, // radius, and current distance the center of the sphere is from the plane. Offset = GetCollisionOffset(normal, radius, distance); // Now that we have the offset, we want to ADD it to the position and // view vector in our camera. This pushes us back off of the plane. We // don't see this happening because we check collision before we render // the scene. camera -> SetPosition(Position + Offset); //Устанавливаем новый вектор позиции камеры Vector3D v = camera -> GetDirection() + Offset; camera -> SetDirection(v); //Устанавливаем новый вектрор направления взгляда камеры } } } } |
Люди помогите что у меня не так???
Правка: 10 сен. 2004 12:34
Проблема со столкновениями | 10 сен. 2004 | 12:33 | #5 |
---|
Привожу полностью код для столкновениуй.
Применяемые функции:
Применяемые функции:
//Определение позиции сферы относительно плоскости //Спереди,сзади,пересечение int ClassifySphere(Vector3D &Center,Vector3D &normal, Vector3D &Point, float radius, float &distance) { //Находим расстояние между нормалью и точкой //Из уравнения плоскости имеем Ax+By+cZ+D = 0; //D = -(Ax+By+cZ+D) где Normal = {A,B,A},Point = {x,y,z} float d = - dotProduct(normal, Point); //Находим расстояние дистанцию между центром сферы и //Нормалью к плоскости distance = dotProduct(normal, Center) + d; //Далее сравниваем это расстояние по модулю с радиусом сферы if(fabs(distance) < radius) return INTERSECTS; else if (distance >= radius) return FRONT; return BEHIND; } //Определнение пересечения сферы с полигоном //Параметры Center - центр сферы Polygon - полигон, //vertexCount - число вершин полигона,radius - радиус сферы bool EdgeSphereCollision(Vector3D &Center, Vector3D Polygon[], int vertexCount, float radius) { Vector3D Point; //Просмотр всех вершин полигона for (int i = 0; i < vertexCount; i++) { //Находим ближайшую точку к центру сферы на текущем ребре //Нахождение точки на данном отрезке, ближайшей к данной точке. Point = ClosestPointOnLine(Polygon[i], Polygon[(i + 1) % vertexCount], Center); //Теперь считаем расстояние между этой ближайшей точкой //и центром if (Distance(Point, Center) < radius) return true;//Произошдо столкновение } return false; } //Нахождение смещения, для движения центра сферы от пересеченного полигона. //Входные параметры Нормальный вектор радиус расстояние Vector3D GetCollisionOffset(Vector3D &normal, float radius, float distance) { if (distance > 0) return normal * (radius - distance); else return normal * (radius + distance); //Если дистанция равна нулю то столкновения нет возвращаем //нулевой вектор return Vector3D(0,0,0); } |
В следующем посте последняя функция проверки столкновений
Ну и где же обещанная на 30 августа спецификация OpenGL 2.0 ? | 10 сен. 2004 | 9:53 | #22 |
---|
YgriK
А как ты думаешь вот выпустят версию Microsoft Visual C++ .Net за 2005 год.
Там наверное будет уже другие файлы gl.h,glu.h и соответствующие библиотеки да + еще расширения для версии 2.0?
А как ты думаешь вот выпустят версию Microsoft Visual C++ .Net за 2005 год.
Там наверное будет уже другие файлы gl.h,glu.h и соответствующие библиотеки да + еще расширения для версии 2.0?