как подключить библиотеку GL/glext.bi

Предыдущая тема Следующая тема Перейти вниз

как подключить библиотеку GL/glext.bi

Сообщение  elf16 в Вс Дек 07, 2014 12:09 pm

как подключить библиотеку GL/glext.bi

подключаю

Код:
#include once "GL/glext.bi"


использование функции из glext.bi
Код:
glGenBuffers 1, @gdata
Выдает такое:

При коипиляции Deprecate console

Код:
Morf3D.bas(52) error 10: Expected '='
   glGenBuffers 1, @gdata
                ^
При компиляции Windows console

Код:
Morf3D.bas(52) error 41: Variable not declared, glGenBuffers in 'glGenBuffers 1, @gdata'

glGenBuffers  в GL/glext.bi есть я проверял, но там есть условия по версии GL коментарии для компилятора как я понял

elf16

Сообщения : 5
Дата регистрации : 2014-12-06

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: как подключить библиотеку GL/glext.bi

Сообщение  Замабувараев в Вт Дек 09, 2014 3:38 am

Процедуры, подпрограммы и функции в фрибейсике принято вызывать вместе со скобками. Поэтому компилятор ругается на устаревший (deprecated) код.

Код:


glGenBuffers(1, @gdata)


Вызов процедур без скобок позволяется только в устаревших диалектах с опцией компиляции -qb или -fblite.
avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 33
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: как подключить библиотеку GL/glext.bi

Сообщение  elf16 в Вт Дек 09, 2014 3:22 pm

спасибо помогло, но программа компилится без ошибок, а при исполнии ошибка, думаю с openGL 2.0 и выше FB не дружит Sad

Код:


#INCLUDE "Morf3D.bi"

Dim SHARED AS STRING Tastendruck
Dim vboid As Integer
Dim  As Single gdata(9) = {1.0, 0.0, 1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 1.0}


'Dim bdata As Single Ptr
'bdata:
'Data 1.0, 0.0, 1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 1.0
'Restore bdata



SCREEN 19, 16, , 2
glViewport 0, 0, 800, 600                      ' den Current Viewport auf eine Ausgangsposition setzen
glMatrixMode GL_PROJECTION                    ' Den Matrix-Modus Projection wählen
glLoadIdentity                                ' Diesen Modus auf Anfangswerte setzen
gluPerspective 45.0, 800.0/600.0, 0.1, 100.0  ' Grundeinstellungen des Anezeigefensters festlegen
glMatrixMode GL_MODELVIEW                      ' Auf den Matrix-Modus Modelview schalten
glShadeModel GL_SMOOTH
glLoadIdentity                                ' und auch diesen auf Anfangswerte setzen
glClearColor 0, 0, 0, 0.0              ' Setze Farbe für löschen auf Mittelgrau
glClearDepth 1.0                              ' Depth-Buffer Löschen erlauben
glEnable GL_DEPTH_TEST                        ' den Tiefentest GL_DEPTH_TEST einschalten
glDepthFunc GL_LEQUAL 
glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST
glClear GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT  'Tiefen- und Farbpufferbits löschen

DO UNTIL Tastendruck = CHR(27) :'die Schleife solange immer wiederholen, bis in der Variablen Tastendruck die Esc-Taste (chr(27) steht
 
  glGenBuffers (1, @vboid)
  glBindBuffer(GL_ARRAY_BUFFER, vboid)
  glBufferData(GL_ARRAY_BUFFER, 9, @gdata(0), GL_STATIC_DRAW)
  glVertexPointer(3, GL_FLOAT, 0, NULL)
  glBindBuffer(GL_ARRAY_BUFFER, vboid)
  glEnableClientState(GL_VERTEX_ARRAY)
  glDrawBuffers(vboid,@gdata(0))

  Tastendruck = INKEY  'Jeder Tastendruck wird sofort in die Variable Tastendruck gespeichert

  FLIP                  'liebes OpenGL, zeig alles, was in der Schleife für dich vornedran steht, auf Monitor an
LOOP
End

В *.bi декларация функwий GL

elf16

Сообщения : 5
Дата регистрации : 2014-12-06

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: как подключить библиотеку GL/glext.bi

Сообщение  elf16 в Ср Дек 10, 2014 3:51 pm

Код:

#INCLUDE "Morf3D.bi"

Dim SHARED AS STRING Tastendruck
Dim vboid As Integer
Dim  As single gdata(9) = {0.0, 0.4, -1,    0.2,  0, -1,    -0.2 , 0, -1}
Dim  As single bdata(9) = {0, 0.4, -0.9,    0.2,  0, -1.1,    -0.2 , 0, -1.1}
Dim  As single mdata(90000)

s=0
For x = 0 To 90000
If s>8 Then s=0   
mdata (x) = gdata (s)
s=s+1   
Next

Screen 19, 16, , 2
glViewport 0, 0, 800, 600                 
glMatrixMode GL_PROJECTION                 
glLoadIdentity                             
gluPerspective 90.0, 800/600, 0.1, 1001
glMatrixMode GL_MODELVIEW             
glShadeModel GL_SMOOTH
glLoadIdentity                         
glClearColor 0, 0, 0, 0.0             
glClearDepth 1.0                             
glEnable GL_DEPTH_TEST                       
glDepthFunc GL_LEQUAL 
glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST
glClear GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT

Do UNTIL Tastendruck = CHR(27) :
   

glClear GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT
glTranslatef(0,.0001,0)
glColor3f (1,0,0)
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(3, GL_FLOAT, 0,@mdata(0))
glDrawArrays(GL_TRIANGLES,0,30000)
glDisableClientState(GL_VERTEX_ARRAY)


Tastendruck = InKey
  Flip
                   
Loop
End

10000 полигон и фпс уже начал падать Sad , на с++ начинает падать на 500 000

elf16

Сообщения : 5
Дата регистрации : 2014-12-06

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: как подключить библиотеку GL/glext.bi

Сообщение  trew в Ср Дек 10, 2014 5:32 pm

elf16 пишет:10000 полигон и фпс уже начал падать Sad , на с++ начинает падать на 500 000

Да ну? Не верю, как говорил Станиславский. Хотелось бы увидеть оба проекта на С++ и FB со скоростью измерения FPS.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Летающий куб на Опенгёл

Сообщение  Замабувараев в Пт Дек 12, 2014 10:03 am

Файл OpenGLCube.bi

Код:


#define unicode
#include "windows.bi"
'
#include "fbgfx.bi"
#include "GL/gl.bi"
#include "GL/glu.bi"


Declare Sub LoadTextures()

Declare Sub DrawCube(ByVal a As Single, ByVal r1 As Single, ByVal g1 As Single, ByVal b1 As Single, ByVal a1 As Single, _
                  ByVal r2 As Single, ByVal g2 As Single, ByVal b2 As Single, ByVal a2 As Single, _
                  ByVal r3 As Single, ByVal g3 As Single, ByVal b3 As Single, ByVal a3 As Single, _
                  ByVal r4 As Single, ByVal g4 As Single, ByVal b4 As Single, ByVal a4 As Single, _
                  ByVal r5 As Single, ByVal g5 As Single, ByVal b5 As Single, ByVal a5 As Single, _
                  ByVal r6 As Single, ByVal g6 As Single, ByVal b6 As Single, ByVal a6 As Single)


Declare Sub DrawBox(ByVal a As Single, ByVal b As Single, ByVal c As Single, _
                  ByVal r1 As Single, ByVal g1 As Single, ByVal b1 As Single, ByVal a1 As Single, _
                  ByVal r2 As Single, ByVal g2 As Single, ByVal b2 As Single, ByVal a2 As Single, _
                  ByVal r3 As Single, ByVal g3 As Single, ByVal b3 As Single, ByVal a3 As Single, _
                  ByVal r4 As Single, ByVal g4 As Single, ByVal b4 As Single, ByVal a4 As Single, _
                  ByVal r5 As Single, ByVal g5 As Single, ByVal b5 As Single, ByVal a5 As Single, _
                  ByVal r6 As Single, ByVal g6 As Single, ByVal b6 As Single, ByVal a6 As Single)
Declare Sub DrawPoligon(ByVal x1 As Single, ByVal y1 As Single, ByVal z1 As Single, _
             ByVal x2 As Single, ByVal y2 As Single, ByVal z2 As Single, _
             ByVal x3 As Single, ByVal y3 As Single, ByVal z3 As Single, _
             ByVal x4 As Single, ByVal y4 As Single, ByVal z4 As Single, _
             ByVal r As Single, ByVal g As Single, ByVal b As Single, ByVal a As Single)
Declare Function CalculateScaler(ByVal Param As Single, ByVal mMin As Single, _
                           ByVal mMax As Single, ByVal Scaler As Single)As Single



Файл OpenGLCube.bas

Код:


#include "OpenGLCube.bi"

Private Sub DrawPoligon(ByVal x1 As Single, ByVal y1 As Single, ByVal z1 As Single, _
             ByVal x2 As Single, ByVal y2 As Single, ByVal z2 As Single, _
             ByVal x3 As Single, ByVal y3 As Single, ByVal z3 As Single, _
             ByVal x4 As Single, ByVal y4 As Single, ByVal z4 As Single, _
             ByVal r As Single, ByVal g As Single, ByVal b As Single, ByVal a As Single)
   glBegin(GL_QUADS)
      glColor4f(r,g,b,a)
      glTexCoord2f(0, 0)
      glVertex3d(x1, y1, z1)
      glTexCoord2f(0, 1)
      glVertex3d(x2, y2, z2)
      glTexCoord2f(1, 1)
      glVertex3d(x3, y3, z3)
      glTexCoord2f(1, 0)
      glVertex3d(x4, y4, z4)
   glEnd()

End Sub

' Вычисляет коэффициент
Private Function CalculateScaler(ByVal Param As Single, ByVal mMin As Single, ByVal mMax As Single, ByVal Scaler As Single)As Single
   If Param > mMax Then
      Return -1
   Else
      If Param < mMin Then
         Return 1
      Else
         Return Scaler
      End If
   End If
End Function

Private Sub DrawCube(ByVal a As Single, ByVal r1 As Single, ByVal g1 As Single, ByVal b1 As Single, ByVal a1 As Single, _
                  ByVal r2 As Single, ByVal g2 As Single, ByVal b2 As Single, ByVal a2 As Single, _
                  ByVal r3 As Single, ByVal g3 As Single, ByVal b3 As Single, ByVal a3 As Single, _
                  ByVal r4 As Single, ByVal g4 As Single, ByVal b4 As Single, ByVal a4 As Single, _
                  ByVal r5 As Single, ByVal g5 As Single, ByVal b5 As Single, ByVal a5 As Single, _
                  ByVal r6 As Single, ByVal g6 As Single, ByVal b6 As Single, ByVal a6 As Single)
   ' нижняя грань
   DrawPoligon(0,0,0, a,0,0, a,0,a, 0,0,a, r1,g1,b1,a1)
   ' задняя грань
   DrawPoligon(0,0,0, a,0,0, a,a,0, 0,a,0, r2,g2,b2,a2)
   ' левая грань
   DrawPoligon(0,0,0, 0,0,a, 0,a,a, 0,a,0, r3,g3,b3,a3)
   ' верхняя грань
   DrawPoligon(0,a,0, a,a,0, a,a,a, 0,a,a, r4,g4,b4,a4)
   ' передняя грань
   DrawPoligon(0,0,a, a,0,a, a,a,a, 0,a,a, r5,g5,b5,a5)
   ' правая грань
   DrawPoligon(a,0,0, a,0,a, a,a,a, a,a,0, r6,g6,b6,a5)
End Sub

Private Sub DrawBox(ByVal a As Single, ByVal b As Single, ByVal c As Single, _
                  ByVal r1 As Single, ByVal g1 As Single, ByVal b1 As Single, ByVal a1 As Single, _
                  ByVal r2 As Single, ByVal g2 As Single, ByVal b2 As Single, ByVal a2 As Single, _
                  ByVal r3 As Single, ByVal g3 As Single, ByVal b3 As Single, ByVal a3 As Single, _
                  ByVal r4 As Single, ByVal g4 As Single, ByVal b4 As Single, ByVal a4 As Single, _
                  ByVal r5 As Single, ByVal g5 As Single, ByVal b5 As Single, ByVal a5 As Single, _
                  ByVal r6 As Single, ByVal g6 As Single, ByVal b6 As Single, ByVal a6 As Single)
   ' нижняя грань
   DrawPoligon(0,0,0, a,0,0, a,0,b, 0,0,b, r1,g1,b1,a1)
   ' задняя грань
   DrawPoligon(0,0,0, a,0,0, a,c,0, 0,c,0, r2,g2,b2,a2)
   ' левая грань
   DrawPoligon(0,0,0, 0,0,b, 0,c,b, 0,b,0, r3,g3,b3,a3)
   ' верхняя грань
   DrawPoligon(0,c,0, a,c,0, a,c,b, 0,c,b, r4,g4,b4,a4)
   ' передняя грань
   DrawPoligon(0,0,b, a,0,b, a,c,b, 0,c,b, r5,g5,b5,a5)
   ' правая грань
   DrawPoligon(a,0,0, a,0,b, a,c,b, a,b,0, r6,g6,b6,a5)
End Sub

Private Sub LoadTextures()
   '' Загрузка картинки
   'Dim texture1 As AUX_RGBImageRec Ptr
   '
   'texture1 = auxDIBImageLoad("wall1.bmp")
   '' Создание текстуры
   'glGenTextures(1, @texture[0])
   'glBindTexture(GL_TEXTURE_2D, texture(0))
   'glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR)
   'glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR)
   'glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data)
End Sub

Dim Shared texture(5) As GLuint Ptr

' Длина, ширина и цветовое разрешение экрана
Dim w As Integer, h as Integer, depth As Integer
Dim ppos(3) As Single = {3,3,3,1}
Dim pdir(3) As Single = {-1,-1,-1}

' Генератор случайных чисел
Randomize(Timer)
' Проверяем разрешение экрана
ScreenInfo(w, h, depth)
' Устанавливаем графический режим с рисованием в опенгёл
' с полученными параметрами длины и ширины экрана
ScreenRes(w, h, depth, , FB.GFX_OPENGL Or FB.GFX_FULLSCREEN)

' Конфигурация OpenGL
glMatrixMode(GL_PROJECTION)      ' Определение матрицы
glLoadIdentity()
glViewport(0,0,w,h)      ' Установка оси координат
gluPerspective(45,w/h, 1, 100)      ' Перспективная проекция
glMatrixMode(GL_MODELVIEW)      ' Отключить вывод невидимых частей
'glEnable(GL_CULL_FACE)
'glCullFace(GL_BACK)
'glEnable(GL_TEXTURE_2D)          ' Включение текстур
'glLoadIdentity()
glEnable(GL_DEPTH_TEST)          ' Тест глубины
'glDepthFunc(GL_LESS)
glEnable(GL_ALPHA_TEST)          ' Тест Альфа
'glAlphaFunc(GL_GREATER, 0.1)
' разрешаем смешение цветов
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
gluLookAt(0,0,20, 0,0,0, 0,1,0)
' glColor будет устанавливать
' свойства материала
' вам не надо дополнительно
' вызывать glMaterialfv
'glEnable(GL_COLOR_MATERIAL)
' разрешаем освещение
'glEnable(GL_LIGHTING)
'// включаем нулевую лампу
'glEnable(GL_LIGHT0)
' устанавливаем положение нулевой лампы
'glLightfv(GL_LIGHT0, GL_POSITION, @ppos(0))
'glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, @pdir(0))

' Длина стороны куба
Dim CubeLength As Single = 1 + Rnd()
Dim CubeScaler As Single = 1

' Скалеры по координатам вершины куба
Dim ScaleX As Single = (-1)^(CInt(Rnd*10)), ScaleY As Single = (-1)^(CInt(Rnd*10)), ScaleZ As Single = (-1)^(CInt(Rnd*10))
Dim CubeX As Single = 2, CubeY As Single = 2, CubeZ As Single = 2

' Цвета граней куба
Dim ScaleCubeColor(5, 3) As Single
Dim CubeColor(5, 3) As Single
For k As Integer = 0 To 5
   For i As Integer = 0 To 2
      ScaleCubeColor(k, i) = (-1)^(CInt(Rnd*10))
      CubeColor(k, i) = Rnd()
   Next i
Next k
For i As Integer = 0 To 5
   CubeColor(i, 3) = 0.89
   ScaleCubeColor(i, 3) = (-1)^(CInt(Rnd*10))
Next i

Do
   glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT)
   ' Рисую куб
   DrawCube(CubeLength, CubeColor(0, 0), CubeColor(0, 1), CubeColor(0, 2),CubeColor(0, 3), CubeColor(1, 0), CubeColor(1, 1), CubeColor(1, 2),CubeColor(1, 3), CubeColor(2, 0), CubeColor(2, 1), CubeColor(2, 2),CubeColor(2, 3), CubeColor(3, 0), CubeColor(3, 1), CubeColor(3, 2),CubeColor(3, 3), CubeColor(4, 0), CubeColor(4, 1), CubeColor(4, 2),CubeColor(4, 3), CubeColor(5, 0), CubeColor(5, 1), CubeColor(5, 2), CubeColor(5, 3))
   ' Вращаю сцену
   glRotatef(ScaleX * ScaleY * ScaleZ * 0.5, CubeColor(0, 0), CubeColor(0, 1), CubeColor(0, 2))
   ' Сдвигаю сцену (параллельный перенос)
   glTranslatef(ScaleX * 0.009, ScaleY * 0.009, ScaleZ * 0.009)
   
   ' Вычисление вектора переноса сцены
   ScaleX = CalculateScaler(CubeX, -10, 5, ScaleX)
   CubeX += ScaleX * 0.009
   ScaleY = CalculateScaler(CubeY, -10, 5, ScaleY)
   CubeY += ScaleY * 0.009
   ScaleZ = CalculateScaler(CubeZ, -10, 5, ScaleZ)
   CubeZ += ScaleZ * 0.009
   ' Изменяю цвета куба
   For k As Integer = 0 To 5
      For i As Integer = 0 To 2
         CubeColor(k, i) += ScaleCubeColor(k, i) * 0.005
         ScaleCubeColor(k, i) = CalculateScaler(CubeColor(k, i), 0, 1, ScaleCubeColor(k, i))
      Next i
   Next k
   For i As Integer = 0 To 5
      CubeColor(i, 3) += ScaleCubeColor(i, 3) * 0.005
      ScaleCubeColor(i, 3) = CalculateScaler(CubeColor(i, 3), 0.7, 1, ScaleCubeColor(i, 3))
   Next i
   ' Вычисляю размеры куба
   CubeScaler = CalculateScaler(CubeLength, 0.1, 10, CubeScaler)
   CubeLength += CubeScaler * 0.01
   
   'glFlush()
   Flip()
   ' Задержку нужно вычислять отдельно
   Sleep(10)
Loop Until MultiKey(FB.SC_ESCAPE)


Компилировать

Код:


fbc -s gui *.bas

avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 33
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: как подключить библиотеку GL/glext.bi

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения