Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизglVertexPointerExt в OpenGL.pas отсутствует... Найти похожие ветки
← →
MrAngel (2003-11-08 20:13) [0]Может кто знает откуда закачать обновлённый .PAS ?
← →
MrAngel (2003-11-08 20:13) [0]Может кто знает откуда закачать обновлённый .PAS ?
← →
Александр-И (2003-11-09 18:43) [1]Не знаю почему, но в хелпе по OpenGL написание ряда процедур отличается от того, что есть на самом деле (посмотри быстрым просмотром файл opengl.dll в .\WINDOWS\SYSTEM). Там они названы бе добавки "Ext" в конце. Кроме того в стандартном заголовочном файле, входящем в поставку дельфи описаны не все функции и процедуры, доступные в opengl.dll и glu32.dll. Лично я себе набросал дополнительный файлик, который подключаю к проекту вместе с opengl :
unit OpenGLExt;
interface
uses Windows, OpenGL;
const
{ константы для массивов вершин }
GL_VERTEX_ARRAY = $8074;
GL_COLOR_ARRAY = $8076;
GL_NORMAL_ARRAY = $8075; { не уверен }
GL_EDGE_FLAG_ARRAY = $8079;
procedure glEnableClientState (aarray: GLenum); stdcall;
procedure glDisableClientState (aarray: GLenum); stdcall;
procedure glVertexPointer (size: GLint; atype: GLenum;
stride: GLsizei; data: pointer); stdcall;
procedure glColorPointer (size: GLint; atype: GLenum; stride: GLsizei;
data: pointer); stdcall;
procedure glEdgeFlagPointer (stride: GLsizei; data: pointer); stdcall;
procedure glNormalPointer (atype: GLenum; stride: GLsizei; data: pointer); stdcall;
procedure glDrawArrays (mode: GLenum; first: GLint; count: GLsizei);
stdcall;
implementation
procedure glEnableClientState (aarray: GLenum); external OpenGL32;
procedure glDisableClientState (aarray: GLenum); external OpenGL32;
procedure glVertexPointer (size: GLint; atype: GLenum;
stride: GLsizei; data: pointer); external OpenGL32;
procedure glColorPointer (size: GLint; atype: GLenum; stride: GLsizei;
data: pointer); external OpenGL32;
procedure glEdgeFlagPointer (stride: GLsizei; data: pointer); external OpenGL32;
procedure glNormalPointer (atype: GLenum; stride: GLsizei; data: pointer); external OpenGL32;
procedure glDrawArrays (mode: GLenum; first: GLint; count: GLsizei); external OpenGL32;
end.
← →
Александр-И (2003-11-09 18:43) [1]Не знаю почему, но в хелпе по OpenGL написание ряда процедур отличается от того, что есть на самом деле (посмотри быстрым просмотром файл opengl.dll в .\WINDOWS\SYSTEM). Там они названы бе добавки "Ext" в конце. Кроме того в стандартном заголовочном файле, входящем в поставку дельфи описаны не все функции и процедуры, доступные в opengl.dll и glu32.dll. Лично я себе набросал дополнительный файлик, который подключаю к проекту вместе с opengl :
unit OpenGLExt;
interface
uses Windows, OpenGL;
const
{ константы для массивов вершин }
GL_VERTEX_ARRAY = $8074;
GL_COLOR_ARRAY = $8076;
GL_NORMAL_ARRAY = $8075; { не уверен }
GL_EDGE_FLAG_ARRAY = $8079;
procedure glEnableClientState (aarray: GLenum); stdcall;
procedure glDisableClientState (aarray: GLenum); stdcall;
procedure glVertexPointer (size: GLint; atype: GLenum;
stride: GLsizei; data: pointer); stdcall;
procedure glColorPointer (size: GLint; atype: GLenum; stride: GLsizei;
data: pointer); stdcall;
procedure glEdgeFlagPointer (stride: GLsizei; data: pointer); stdcall;
procedure glNormalPointer (atype: GLenum; stride: GLsizei; data: pointer); stdcall;
procedure glDrawArrays (mode: GLenum; first: GLint; count: GLsizei);
stdcall;
implementation
procedure glEnableClientState (aarray: GLenum); external OpenGL32;
procedure glDisableClientState (aarray: GLenum); external OpenGL32;
procedure glVertexPointer (size: GLint; atype: GLenum;
stride: GLsizei; data: pointer); external OpenGL32;
procedure glColorPointer (size: GLint; atype: GLenum; stride: GLsizei;
data: pointer); external OpenGL32;
procedure glEdgeFlagPointer (stride: GLsizei; data: pointer); external OpenGL32;
procedure glNormalPointer (atype: GLenum; stride: GLsizei; data: pointer); external OpenGL32;
procedure glDrawArrays (mode: GLenum; first: GLint; count: GLsizei); external OpenGL32;
end.
← →
Александр-И (2003-11-09 18:53) [2]Любопытно, что в opengl.pas сонстанты вреде GL_VERTEX_ARRAY_EXT и т.п. описаны. Но поскольку я не знал, чем отличаются процедуры типа glVertexPointer и glVertexPointerExt, я описал несколько констант, которые проверил методом научного тыка. Так как вроде бы все работает, то можно их убрать, а использовать соответствующие константы с довеском _EXT.
← →
Александр-И (2003-11-09 18:53) [2]Любопытно, что в opengl.pas сонстанты вреде GL_VERTEX_ARRAY_EXT и т.п. описаны. Но поскольку я не знал, чем отличаются процедуры типа glVertexPointer и glVertexPointerExt, я описал несколько констант, которые проверил методом научного тыка. Так как вроде бы все работает, то можно их убрать, а использовать соответствующие константы с довеском _EXT.
← →
MrAngel (2003-11-09 20:12) [3]Ясно спасибо. Однако я проблему решил несколько иным способом, хотя и громоздким.
Я скачал проект с http://www.delphi3d.net/dot/, использую оттуда GL.pas. Там все эти функции есть, правда их нужно инициализировать через glext_LoadExtension("GL_EXT_vertex_array");
← →
MrAngel (2003-11-09 20:12) [3]Ясно спасибо. Однако я проблему решил несколько иным способом, хотя и громоздким.
Я скачал проект с http://www.delphi3d.net/dot/, использую оттуда GL.pas. Там все эти функции есть, правда их нужно инициализировать через glext_LoadExtension("GL_EXT_vertex_array");
← →
MrAngel (2003-11-09 20:23) [4]Однако теперь несколько иная проблема.
Я рисую обыкновенный треугольник. Примерный код
прорисовки
glBegin(GL_TRIANGLES);
glDrawArraysEXT(GL_TRIANGLES,0,1);
glEnd;
Массив обьявляется и заносится следующим образом
type
TVertex3f = record
X : GLfloat;
Y : GLfloat;
Z : GLfloat;
end;
TDelphi3DForm = class(TForm)
...
private
...
Vertexes : array [0..2] of TVertex3f;
public
...
end;
var
Delphi3DForm: TDelphi3DForm;
implementation
{$R *.dfm}
procedure TDelphi3DForm.FormCreate(Sender: TObject);
begin
...
glEnable(GL_DEPTH_TEST);
//Подключаем расширение
glext_LoadExtension("GL_EXT_vertex_array");
glEnable(GL_VERTEX_ARRAY_EXT);
//Заносим данные
Vertexes[0].X := -10;
Vertexes[0].Y := -10;
Vertexes[0].Z := -20;
Vertexes[1].X := 10;
Vertexes[1].Y := -10;
Vertexes[1].Z := -20;
Vertexes[2].X := 0;
Vertexes[2].Y := 10;
Vertexes[2].Z := -20;
//Заносим неисвестно куда
glVertexPointerEXT(3,GL_FLOAT,0,3,@Vertexes);
...
end;
Треугольник через glDrawArraysEXT не прорисовывается, однако, если использовать в качестве прорисовки следующий код, то всё в порядке
glBegin(GL_TRIANGLES);
glArrayElementEXT(0); //Рисуем первую точку
glArrayElementEXT(1); //Вторую
glArrayElementEXT(2); //Третью
glEnd;
Может кто знает, что я не так делаю в первом случае?
← →
MrAngel (2003-11-09 20:23) [4]Однако теперь несколько иная проблема.
Я рисую обыкновенный треугольник. Примерный код
прорисовки
glBegin(GL_TRIANGLES);
glDrawArraysEXT(GL_TRIANGLES,0,1);
glEnd;
Массив обьявляется и заносится следующим образом
type
TVertex3f = record
X : GLfloat;
Y : GLfloat;
Z : GLfloat;
end;
TDelphi3DForm = class(TForm)
...
private
...
Vertexes : array [0..2] of TVertex3f;
public
...
end;
var
Delphi3DForm: TDelphi3DForm;
implementation
{$R *.dfm}
procedure TDelphi3DForm.FormCreate(Sender: TObject);
begin
...
glEnable(GL_DEPTH_TEST);
//Подключаем расширение
glext_LoadExtension("GL_EXT_vertex_array");
glEnable(GL_VERTEX_ARRAY_EXT);
//Заносим данные
Vertexes[0].X := -10;
Vertexes[0].Y := -10;
Vertexes[0].Z := -20;
Vertexes[1].X := 10;
Vertexes[1].Y := -10;
Vertexes[1].Z := -20;
Vertexes[2].X := 0;
Vertexes[2].Y := 10;
Vertexes[2].Z := -20;
//Заносим неисвестно куда
glVertexPointerEXT(3,GL_FLOAT,0,3,@Vertexes);
...
end;
Треугольник через glDrawArraysEXT не прорисовывается, однако, если использовать в качестве прорисовки следующий код, то всё в порядке
glBegin(GL_TRIANGLES);
glArrayElementEXT(0); //Рисуем первую точку
glArrayElementEXT(1); //Вторую
glArrayElementEXT(2); //Третью
glEnd;
Может кто знает, что я не так делаю в первом случае?
← →
VitGun © (2003-11-10 05:17) [5]Внимательно посмотри на название функции...видишь в конце стоит Ext - это значит Extension - т.е. расширение. Тебе нужен файл glext.pas.
Качай вот это:
http://www.delphi3d.net/download/metaglext.zip
А потом вот это:
http://www.delphi3d.net/download/metaglext.xml
Дальше читай ReadMe.txt в первом архиве.
← →
VitGun © (2003-11-10 05:17) [5]Внимательно посмотри на название функции...видишь в конце стоит Ext - это значит Extension - т.е. расширение. Тебе нужен файл glext.pas.
Качай вот это:
http://www.delphi3d.net/download/metaglext.zip
А потом вот это:
http://www.delphi3d.net/download/metaglext.xml
Дальше читай ReadMe.txt в первом архиве.
← →
MrAngel (2003-11-10 13:16) [6]Ого !!! Спасибо - дельная вещь.
Хорошо, а как же тогда со второй проблемой ? :-\
← →
MrAngel (2003-11-10 13:16) [6]Ого !!! Спасибо - дельная вещь.
Хорошо, а как же тогда со второй проблемой ? :-\
← →
MrAngel (2003-11-10 23:51) [7]Ребята, ну так что? Неужели ни то раньше этим не занимался?
А ведь это один из быстрых методов вывода графики !!!
← →
MrAngel (2003-11-10 23:51) [7]Ребята, ну так что? Неужели ни то раньше этим не занимался?
А ведь это один из быстрых методов вывода графики !!!
← →
Aidar (2003-12-05 13:36) [8]подскажи где найти технология DOT.NET
← →
Aidar (2003-12-05 13:36) [8]подскажи где найти технология DOT.NET
← →
Unknown user © (2003-12-05 19:45) [9]Касательно расширений. Во-первых, всегда надо проверять поддерживается ли видеокартой данное расширение(можно при помощи wglGetProcAddress("имя функции")-если nil -не поддерживается). Во-вторых, можно не подключать дополнительных заголовочных модулей, а нужные тебе функции описать самому, предварительно посмотрев их объявление в dll.
Я не знаю функции glVertexPointerEXT, но скорее всего ты передаешь неверный адрес массива вершин, попробуй Vertexes[0].
← →
Unknown user © (2003-12-05 19:45) [9]Касательно расширений. Во-первых, всегда надо проверять поддерживается ли видеокартой данное расширение(можно при помощи wglGetProcAddress("имя функции")-если nil -не поддерживается). Во-вторых, можно не подключать дополнительных заголовочных модулей, а нужные тебе функции описать самому, предварительно посмотрев их объявление в dll.
Я не знаю функции glVertexPointerEXT, но скорее всего ты передаешь неверный адрес массива вершин, попробуй Vertexes[0].
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.035 c