Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
4-1079555272
KPV-10k
2004-03-17 23:27
2004.05.09
Получить SID пользователя...


4-1079078365
Alexis
2004-03-12 10:59
2004.05.09
Работа с ресурсами на API


1-1082746422
Bairum
2004-04-23 22:53
2004.05.09
Delphi+Excel


3-1081751096
_sulent
2004-04-12 10:24
2004.05.09
SQL Server


6-1079338105
Yojik
2004-03-15 11:08
2004.05.09
ClientSocket при простое и отсутсвии связи... ХЕЛП





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский