In der "Repeat" habe ich den Körper diese Farbe gegeben :
glColor3f_(0.0,1.0,0.0), er erscheint aber nicht grün, sondern dunkelgrau.
wenn ich der "LighDif" eine Farbe zuweise, erscheint der Körper in dieser Farbe und mit Schatten. Dieses ist aber die Lichtfarbe , die auf den Körper strahlt und nicht meine Farbe die ich eingestellt habe. Die Schatten auf den Körper haben dann ein dunkelgrau.
Ich verzweifle schon fast.
Wer kann mir helfen, das der Körper die Farbe von der "Repeat" bekommt mit einen Schatten beim Drehen?
Code: Alles auswählen
IncludeFile "opengl.pb"
Dim zahl.f(800,2)
Global i.w,i1.w,z1.w,ii.w
Global text.s
;-LIGHT MEMORY
Global *LightAmb = AllocateMemory(4*4)
Global *LightDif = AllocateMemory(4*4)
Global *LightPos = AllocateMemory(4*4)
PokeF(*LightAmb,0.0):PokeF(*LightAmb+4,0.0):PokeF(*LightAmb+8,0.0):PokeF(*LightAmb+12,1.0)
PokeF(*LightDif,0.0):PokeF(*LightDif+4,0.0):PokeF(*LightDif+8,0.0):PokeF(*LightDif+12,1.0)
PokeF(*LightPos,0.5):PokeF(*LightPos+4,0.5):PokeF(*LightPos+8,0.5):PokeF(*LightPos+12,1.0)
Structure GLscreen
container.l
hWnd.l
hDC.l
EndStructure
Procedure InitGL()
glShadeModel_(#GL_SMOOTH)
glClearStencil_(0)
glEnable_(#GL_DEPTH_TEST)
glDepthFunc_(#GL_LEQUAL)
glHint_(#GL_PERSPECTIVE_CORRECTION_HINT, #GL_NICEST)
glEnable_(#GL_TEXTURE_2D)
glLightfv_(#GL_LIGHT0, #GL_AMBIENT, *LightAmb)
glLightfv_(#GL_LIGHT0, #GL_DIFFUSE, *LightDif)
glLightfv_(#GL_LIGHT0, #GL_POSITION, *LightPos)
glEnable_(#GL_LIGHT0)
glEnable_(#GL_LIGHTING)
EndProcedure
Procedure OpenGLScreen(*p.GLscreen,x,y,w,h)
If *p
container = ContainerGadget(#PB_Any,x,y,w,h)
If container
hwnd = GadgetID(container)
pfd.PIXELFORMATDESCRIPTOR
hdc = GetDC_(hwnd)
pfd\nSize = SizeOf(PIXELFORMATDESCRIPTOR)
pfd\nVersion = 1
pfd\dwFlags = #PFD_SUPPORT_OPENGL | #PFD_DOUBLEBUFFER | #PFD_DRAW_TO_WINDOW
pfd\iLayerType = #PFD_MAIN_PLANE
pfd\iPixelType = #PFD_TYPE_RGBA
pfd\cColorBits = 24
pfd\cDepthBits = 16
pixformat = ChoosePixelFormat_(hdc, pfd)
SetPixelFormat_(hdc, pixformat, pfd)
hrc = wglCreateContext_(hdc)
wglMakeCurrent_(hdc, hrc)
SwapBuffers_(hdc)
glClearColor_(0.0, 0.0, 0.0, 0.0)
*p\container = container
*p\hWnd = GadgetID(container)
*p\hDC = hdc
ProcedureReturn 1
EndIf
EndIf
EndProcedure
If ReadFile(0, "test1.c")
For i = 1 To 3
text.s=ReadString(0)
Next
For i=1 To 5
text.s=ReadString(0)
If Left(text.s, 2)="//"
text.s=ReadString(0)
Break
EndIf
Next
For i1=0 To 800
text.s=ReadString(0)
If Left(text, 2)="};"
z1=i1
Break
EndIf
zahl(i1,0)=ValF(StringField(text, 1, ","))
zahl(i1,1)=ValF(StringField(text, 2, ","))
zahl(i1,2)=ValF(StringField(text, 3, ","))
Next
EndIf
If OpenWindow(0, 0, 0, 800,600, "TEST",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ButtonGadget(0,520,10,80,20, "links")
ButtonGadget(1,520,40,80,20, "rechts")
If OpenGLScreen(screen.GLscreen,10,10,500,500)
InitGL()
HideWindow(0,0)
Repeat
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
glLoadIdentity_()
glColor3f_(0.0,1.0,0.0)
glTranslatef_ (0.0,-0.1,0.0)
glRotatef_(xrot.f,1.0,1.0,1.0)
glScalef_(0.03,0.03,0.03)
glBegin_(#GL_POLYGON)
For ii=0 To z1-1
glVertex3f_ (zahl(ii,0), zahl(ii,1), zahl(ii,2))
Next
glEnd_()
SwapBuffers_(screen\hdc)
Event = WaitWindowEvent(0)
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
If Event = #PB_Event_Gadget
If GadgetID = 0
xrot.f=xrot.f+5
EndIf
If GadgetID = 1
xrot.f=xrot.f-5
EndIf
EndIf
xrot.f=xrot.f+0.05
Until Event = #PB_Event_CloseWindow
ReleaseDC_(screen\hWnd,screen\hDC)
EndIf
EndIf