как подключить библиотеку GL/glext.bi
Участников: 3
Страница 1 из 1
как подключить библиотеку GL/glext.bi
как подключить библиотеку GL/glext.bi
подключаю
использование функции из glext.bi
При коипиляции Deprecate console
glGenBuffers в GL/glext.bi есть я проверял, но там есть условия по версии GL коментарии для компилятора как я понял
подключаю
- Код:
#include once "GL/glext.bi"
использование функции из glext.bi
- Код:
glGenBuffers 1, @gdata
При коипиляции Deprecate console
- Код:
Morf3D.bas(52) error 10: Expected '='
glGenBuffers 1, @gdata
^
- Код:
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
Процедуры, подпрограммы и функции в фрибейсике принято вызывать вместе со скобками. Поэтому компилятор ругается на устаревший (deprecated) код.
Вызов процедур без скобок позволяется только в устаревших диалектах с опцией компиляции -qb или -fblite.
- Код:
glGenBuffers(1, @gdata)
Вызов процедур без скобок позволяется только в устаревших диалектах с опцией компиляции -qb или -fblite.
Re: как подключить библиотеку GL/glext.bi
спасибо помогло, но программа компилится без ошибок, а при исполнии ошибка, думаю с openGL 2.0 и выше FB не дружит
В *.bi декларация функwий GL
- Код:
#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
- Код:
#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 полигон и фпс уже начал падать , на с++ начинает падать на 500 000
elf16- Сообщения : 5
Дата регистрации : 2014-12-06
Re: как подключить библиотеку GL/glext.bi
elf16 пишет:10000 полигон и фпс уже начал падать Sad , на с++ начинает падать на 500 000
Да ну? Не верю, как говорил Станиславский. Хотелось бы увидеть оба проекта на С++ и FB со скоростью измерения FPS.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Летающий куб на Опенгёл
Файл OpenGLCube.bi
Файл OpenGLCube.bas
Компилировать
- Код:
#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
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|