Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

glVertexPointerExt в OpenGL.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: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: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 в первом архиве.


 
MrAngel   (2003-11-10 13:16) [6]

Ого !!! Спасибо - дельная вещь.

Хорошо, а как же тогда со второй проблемой ? :-\


 
MrAngel   (2003-11-10 23:51) [7]

Ребята, ну так что? Неужели ни то раньше этим не занимался?
А ведь это один из быстрых методов вывода графики !!!


 
Aidar   (2003-12-05 13:36) [8]

подскажи где найти технология DOT.NET


 
Unknown user ©   (2003-12-05 19:45) [9]

Касательно расширений. Во-первых, всегда надо проверять поддерживается ли видеокартой данное расширение(можно при помощи wglGetProcAddress("имя функции")-если nil -не поддерживается). Во-вторых, можно не подключать дополнительных заголовочных модулей, а нужные тебе функции описать самому, предварительно посмотрев их объявление в dll.
Я не знаю функции glVertexPointerEXT, но скорее всего ты передаешь неверный адрес массива вершин, попробуй Vertexes[0].



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
6-1079427087
Ozone
2004-03-16 11:51
2004.04.11
Не соединяется


14-1082460600
Gero
2004-04-20 15:30
2004.04.11
"Начинающим"


6-1079332218
pave
2004-03-15 09:30
2004.04.11
TClientSocket в консольном приложении


3-1079064110
Виктор
2004-03-12 07:01
2004.04.11
как просуммировать по столбцам в DBGrid,


1-1079970692
IKos
2004-03-22 18:51
2004.04.11
Как запихать прогу в трей?