![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
glVertexPointerExt в OpenGL.pas отсутствует...
MrAngel © (2003-11-08 20:13:00)Может кто знает откуда закачать обновлённый .PAS ?
Unknown user (2003-12-05 19:45:00) [1]Касательно расширений. Во-первых, всегда надо проверять поддерживается ли видеокартой данное расширение(можно при помощи wglGetProcAddress('имя функции')-если nil -не поддерживается). Во-вторых, можно не подключать дополнительных заголовочных модулей, а нужные тебе функции описать самому, предварительно посмотрев их объявление в dll.
Я не знаю функции glVertexPointerEXT, но скорее всего ты передаешь неверный адрес массива вершин, попробуй Vertexes[0].
Aidar (2003-12-05 13:36:00) [2]подскажи где найти технология DOT.NET
MrAngel (2003-11-10 23:51:00) [3]Ребята, ну так что? Неужели ни то раньше этим не занимался?
А ведь это один из быстрых методов вывода графики !!!
MrAngel (2003-11-10 13:16:00) [4]Ого !!! Спасибо - дельная вещь.
Хорошо, а как же тогда со второй проблемой ? :-\
VitGun (2003-11-10 05:17:00) [5]Внимательно посмотри на название функции...видишь в конце стоит Ext - это значит Extension - т.е. расширение. Тебе нужен файл glext.pas.
Качай вот это:
http://www.delphi3d.net/download/metaglext.zip
А потом вот это:
http://www.delphi3d.net/download/metaglext.xml
Дальше читай ReadMe.txt в первом архиве.
MrAngel (2003-11-09 20:23:00) [6]Однако теперь несколько иная проблема.
Я рисую обыкновенный треугольник. Примерный код
прорисовки
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:12:00) [7]Ясно спасибо. Однако я проблему решил несколько иным способом, хотя и громоздким.
Я скачал проект с http://www.delphi3d.net/dot/, использую оттуда GL.pas. Там все эти функции есть, правда их нужно инициализировать через glext_LoadExtension('GL_EXT_vertex_array');
Александр-И (2003-11-09 18:53:00) [8]Любопытно, что в opengl.pas сонстанты вреде GL_VERTEX_ARRAY_EXT и т.п. описаны. Но поскольку я не знал, чем отличаются процедуры типа glVertexPointer и glVertexPointerExt, я описал несколько констант, которые проверил методом научного тыка. Так как вроде бы все работает, то можно их убрать, а использовать соответствующие константы с довеском _EXT.
Александр-И (2003-11-09 18:43:00) [9]Не знаю почему, но в хелпе по 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.