Сообщения на форуме пользователя Andrey (214 стр.)
Проблема с VBO: неправильное отображение геометрии | 3 июня 2005 | 18:36 | #4 |
---|
>Ты вполне можешь использовать glInterleaved и VBO одновременно. Так что это будет лишь проще в написании и отладке,
>а функционально эквивалентно.
>Правка: чтобы их заюзать вместе с VBO, нужно загрузить данные (что ты уже сделал) и передать вместо указателя смещение (то есть ноль, видимо).
Так что-то я не пойму как их использовать вместе?
вот так на экране пусто:
glBindBufferARB(GL_ARRAY_BUFFER_ARB, surface -> bufferId); glInterleavedArrays(GL_T2F_N3F_V3F, 0, surface -> openGLVertices); glDrawArrays(GL_TRIANGLES, 0, 3 * surface -> numVertices);
glInterleavedArrays(GL_T2F_N3F_V3F, 0, surface -> openGLVertices); glDrawArrays(GL_TRIANGLES, 0, 3 * surface -> numVertices);
дак VBO берет из видео память а
glInterleavedArrays из оперативной это же совсем разные вещи как их совместить?
что ты еще по колу можешь сказать гле ошибка?
[/code]
Проблема с VBO: неправильное отображение геометрии | 3 июня 2005 | 18:17 | #2 |
---|
спасибо за ответ но не помогло :(
>Во-вторых, это можно было пофиксить и самому, а не создавать две одинаковых (!) ветки на форуме.
извиняюсь торопился насчет 2 веток насчет постить запутался с адресами :)
>В-третьих, непонятно, почему бы тебе не рендерить через glInteleavedArrays(), как ты это предлагал делать
>(тем более, что это лишь сокращение для длинного и нудного кода, который ты запостил выше):
а что это будет НЕ МЕДЛЕННЕЕ VBO ?????????????????
>В-четвёртых, и самое главное, если ты перейдёшь на optimized triangle strips, ты сможешь в несколько раз ускорить этот рендеринг
GL_TRIANGLE_STRIP?
Проблема с VBO: неправильное отображение геометрии | 3 июня 2005 | 17:53 | #0 |
---|
решил разобраться с VBO.
отображается полная лажа.
мешь представлен таким кодом:
//Класс мешь class Mesh2 { public: ... //вершина для OpenGL struct OpenGLVertex { //Текстурные координаты Vector2D tvert; //Нормаль Vector3D normal; //координаты вершины Vector3D vert; }; ... //Грань OpenGL struct OpenGLVertice { OpenGLVertex openGLVertex[3]; }; ... //Поверхность class Surface { public: union { struct { //индекс буфера unsigned int bufferId; //массив вершин для OpenGL OpenGLVertice *openGLVertices; }; ... }; //число вершин int numVertices; ... }; ... };
Каждая поверхность Mesh'а(surface) проинициализировона таким образом:
рендер провожу таким образом :
//Отображение Меша void DrawOGLMesh(Mesh2 *mesh) { //число поверхностей int num = mesh -> GetNumSurface(); Mesh2::Surface *surface; ... //цикл по поверхностям for(int i = 0; i < num; i++) { ... //получить поверхность surface = &mesh -> GetSurface(i); ... //выбрать буфер glBindBufferARB(GL_ARRAY_BUFFER_ARB, surface -> bufferId); //разрешить вершинный массив glEnableClientState(GL_VERTEX_ARRAY); //разрешить массив текстурных координат glEnableClientState(GL_TEXTURE_COORD_ARRAY); //разрешить массив нормалей glEnableClientState(GL_NORMAL_ARRAY); //указатель на вершины glVertexPointer(3, GL_FLOAT, sizeof(Vector2D) + sizeof(Vector3D), (char *)NULL + sizeof(Vector2D) + sizeof(Vector3D)); //указатель на нормали glNormalPointer(GL_FLOAT, sizeof(Vector2D) + sizeof(Vector3D), (char *)NULL + sizeof(Vector2D) + sizeof(Vector3D)); //указатель на текстурные координаты glTexCoordPointer(2, GL_FLOAT, sizeof(Vector2D) + sizeof(Vector3D), NULL); //отобразить элементы glDrawArrays(GL_TRIANGLES, 0, 3 * surface -> numVertices); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); .... } } |
на экране получается полная лажа. Есть подозрения что я не правильно ставлю смещения адресов в
glNormalPointer
glVertexPointer
glTexCoordPointer
если проводить редер проводить обычным способом:
glInterleavedArrays(GL_T2F_N3F_V3F, 0, surface -> openGLVertices); glDrawArrays(GL_TRIANGLES, 0, 3 * surface -> numVertices);
Скажите что я делаю не так?
Спасибо все заранее.
С уважением Андрей.
Delphi 4k Demo | 2 июня 2005 | 15:03 | #5 |
---|
а вот это заработало..
Delphi 4k Demo | 2 июня 2005 | 14:11 | #3 |
---|
А у меня не запускается :( (Windows 2000) только *.exe 12 кб работает
Строки в С++ | 31 мая 2005 | 14:39 | #12 |
---|
тебе только поможет возможно отдельный тест проблемных участков кода в отдельной прграмме...
меня он не раз спасал...
Какая работа для программиста самая высокооплачиваемая? | 31 мая 2005 | 12:45 | #49 |
---|
>Но это все не геймдев -> довольно скучно. СУБД, например, ужасно нудная вещь.
да, как ты прав!!!! особенно про СУБД... но системное программирование по моему не скучно...я работаю сам с СУБД какая скучная лажа :(((
стоит ли покупать эту книгу?(ссылка внутри) | 31 мая 2005 | 9:01 | #6 |
---|
Всем спасибо за ответы!!!
тема закрыта
стоит ли покупать эту книгу?(ссылка внутри) | 30 мая 2005 | 15:23 | #2 |
---|
а вообще там про OpenGL что-нибудь поновей есть или там только самые основы?
Спасибо за ответ!!!!
Вопрос про бинарный формат | 30 мая 2005 | 12:09 | #8 |
---|
>ну а как например в *.x файле содержится строка типа normal, vertices при загрузке(в бинарном формате) это ведь как то >распознается где цифра, где заголовок
значит так берешь разрабатываешь свой бинарный формат.
ты сам будешь знать где у тебя строка - и читать строку где число - читать число.
строку можно писать так:
1) 1 байт пишем длину, последующие байты это строка, берешь читаешь длину а потом строку этой длины.
2) записать в строку нулевой термирующий символ '\0' читать по символу пока не вcтретится '\0'. годится для небольших строк
3) сразу прочитать этак 255 байт строки в память. потом из памяти прочитать строку до нулевого символа и вернутся на позицию равную текущая - (255 - длина прочитанной строки)...
читать числа ты уже умешь.. какие еще проблемы?
Вопрос про бинарный формат | 30 мая 2005 | 10:21 | #4 |
---|
#include <fstream>
//ofstream находится в namespace std, поэтому подключаем его using namespace std; int main() { fstream handler;//лучше fstream он для ввода/вывода handler.open("Log.txt", ios_base::binary | ios_base::out);//открыть двоичный файл для вывода if (!handler.is_open()) //проверка открытия return -1; float x=0.04f; handler.write((char*)&x, sizeof(float)); //записываем 4 байта этого float handler.close();//вот тут обязательно закрыть handler.open("Log.txt", ios_base::binary | ios_base::in););//открыть двоичный файл для ввода if (!handler.is_open()) //проверка открытия return -1; handler.read((char*)&x, sizeof(float)); //читаем 4 байта этого float return 0; //здесь handler автоматически закроется... } |
стоит ли покупать эту книгу?(ссылка внутри) | 30 мая 2005 | 9:47 | #0 |
---|
вот ссылка http://www.williamspublishing.com/Books/5-8459-0772-1.html
я вот почитал содержание и подумал что объем довольно большой и материал достойный внимания что на это скажите?
стоит ли ее покупать? есть ли она у кого нибудь?
спасибо всем заранее с Уважением Андрей.
DX9c vs VC6 | 27 мая 2005 | 13:38 | #10 |
---|
ясно у меня стоит 7.0 все собирается... протсо непонятно почему под 6.0 не получается
Direct3D:Компилятор ругается на значения из enum'а | 27 мая 2005 | 11:39 | #3 |
---|
Все ясно тема закрыта.
Direct3D:Компилятор ругается на значения из enum'а | 27 мая 2005 | 11:33 | #2 |
---|
я пробовал убирать
#include<d3dtypes.h>