Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 24.08.2007, 19:10 Titel: Probleme mit OpenGL |
|
|
Hey,
und mal wieder befasse oder versuche ich mich an OpenGL. Dazu habe ich mir erstmal Milkshape 3D runtergeladen und dann auch ein paar 3D Grafiken erstellt, die ich als ms3d-Datei gespeichert habe. Um die Dateien mal probeweise anzeigen zu können habe ich einen Code aus den NeHe-Tutorials geändert, so dass meine Grafik geladen wird anstatt die Grafik der Nehe-Tutorials.
Code: |
'' This Code Was Created By Brett Porter For NeHe Productions 2000
'' Visit NeHe Productions At http://nehe.gamedev.net
''
'' Visit Brett Porter's Web Page at
'' http://www.geocities.com/brettporter/programming
''
''------------------------------------------------------------------------------
'' Press ESC key to quit
''
''------------------------------------------------------------------------------
'' compile as: fbc -s gui lesson31.bas
option explicit
'' Setup our booleans
const false = 0
const true = not false
const null = 0
#include once "GL/gl.bi"
#include once "GL/glu.bi"
#include once "fbgfx.bi" '' for Scan code constants
#include once "milkshapemodel.bi"
#include once "bmpload.bi"
''------------------------------------------------------------------------------
'' Declare user functions
declare function InitGL() as integer
''------------------------------------------------------------------------------
'' Declare Global Variables
dim shared MilkShapeModel as MODEL '' Holds The Model Data
dim yrot as single '' Y Rotation
Model_Init varptr(MilkShapeModel)
Model_LoadModelData (varptr(MilkShapeModel), exepath + "/data/G/tier.ms3d")
windowtitle "Brett Porter & NeHe's MilkShape Model Rendering Tutorial" '' Set window title
screen 18, 32, , 2
'' ReSizeGLScene
glViewport 0, 0, 640, 480 '' Reset The Current Viewport
glMatrixMode GL_PROJECTION '' Select The Projection Matrix
glLoadIdentity '' Reset The Projection Matrix
gluPerspective 45.0, 640/480, 1.0, 1000.0 '' Calculate The Aspect Ratio Of The Window
glMatrixMode GL_MODELVIEW '' Select The Modelview Matrix
glLoadIdentity '' Reset The Projection Matrix
InitGL() '' All Setup For OpenGL Goes Here
do
glClear GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT '' Clear The Screen And The Depth Buffer
glLoadIdentity '' Reset The Modelview Matrix
gluLookAt 75, 75, 75, 0, 0, 0, 0, 1, 0 '' (3) Eye Postion (3) Center Point (3) Y-Axis Up Vector
glRotatef yrot, 0.0, 1.0, 0.0 '' Rotate On The Y-Axis By yrot
Model_Draw (@MilkShapeModel) '' Draw The Model
yrot + = 1.0f '' Increase yrot By One
flip
if inkey$ = chr$(255)+"k" then exit do '' exit if close box is clicked
loop while MULTIKEY(SC_ESCAPE) = 0
'' Empty keyboard buffer
while inkey <> "": wend
end
''------------------------------------------------------------------------------
'' This Will Be Called Right After The GL Window Is Set up
function InitGL() as integer
Model_ReloadTextures (@MilkShapeModel) '' Loads Model Textures
glEnable GL_TEXTURE_2D '' Enable Texture Mapping ( NEW )
glShadeModel GL_SMOOTH '' Enable Smooth Shading
glClearColor 0.0, 0.0, 0.0, 0.5 '' Black Background
glClearDepth 1.0 '' Depth Buffer Setup
glEnable GL_DEPTH_TEST '' Enables Depth Testing
glDepthFunc GL_LEQUAL '' The Type Of Depth Testing To Do
glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST '' Really Nice Perspective Calculations
InitGL = true
end function
|
Und jetzt mein Problem:
Die 3D-Grafiken (also nur meine) lassen sich in zwar anzeigen allerdings sind sie komplett weiß anstatt dass eine Textur haben. Liegt es vielleicht daran, dass ich mehrere Texturen verwende oder mache ich da was mit Milkshape falsch?
Oder ist es was ganz anderes?
MfG Caran
Zuletzt bearbeitet von Caran am 25.08.2007, 09:18, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 24.08.2007, 19:14 Titel: |
|
|
Kann das sein, dass deine Texturen keine Bitmaps (".bmp") sind?
Lutz Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 24.08.2007, 19:26 Titel: |
|
|
Doch es sind Bitmaps.
Ach ja und in Milkshape werden die Grafiken richtig angezeigt. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 24.08.2007, 19:28 Titel: |
|
|
Sind die Bitmaps auch alle gleich hoch/breit also kA 32x32, 64x64 ect.. soweit ich weiss geht in FreeBASIC es (noch?) nicht wenn diese Formate nicht eingehalten werden.... wichtig ist auch das diese eine gerade anzahl haben also wie 2 4 8 ect.. nichts 3x3 aber da bin ich mir nicht wirklich sicher da ich etwas wie eine 33x33 textur zB noch nie probiert habe.... _________________
 |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 24.08.2007, 19:28 Titel: |
|
|
debug-code einfügen, und prüfen, ob a) der dateiname der bmps richtig übernommen wird (ich erinnere mich dunkel, dass ich da iwelche schwierigkeiten hatte), und b) ob die bmps richtig geladen werden (beispiel: bload vor "screen"/"screenres" = funktioniert nicht)
Lutz Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 24.08.2007, 19:33 Titel: |
|
|
Ok ich glaub fast das, dass die bmps verschieden groß sind, ist das Problem. Am besten mache ich sie alle erstmal gleich groß, danach werd ich noch nen debug-code einfügen und dann sehen wir weiter.
Danke |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 24.08.2007, 19:49 Titel: |
|
|
Also das habe ich jetzt alles gemacht: Die bmps sind jetzt alle gleich groß und ich hab den debug-code eingefügt, allerdings bleibt das Problem bestehen. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 24.08.2007, 20:00 Titel: |
|
|
Ich bin nicht unbedingt OGL geprobt, aber funktioniert das Original Beispiel? Wenn ja waere mir sehr geholfen wenn Du mir diese zukommen lassen koenntest, damit ich das mal vergleichen kann damit auch ich Dir helfen kann  _________________
 |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 24.08.2007, 20:16 Titel: |
|
|
Sorry das ich etwas lang gebraucht habe. War grad weg. Wie dem auch sei ich hab die Dateien hochgeladen und sie sind jetzt hier zu finden:
http://www.file-upload.net/download-380469/model.zip.html
Das original Beispiel funzt bei mir auch ohne Probleme. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 24.08.2007, 20:29 Titel: |
|
|
soweit so gut...
Das Model wird geladen und angezeigt... oO(feine sache)
Die Texturen allerdings werden ebenfalls aus dem Model geladen bzw stehen dort wohl die zuweisungen.. pfad+dateiname???
Kann ich so aber nicht sagen/sehen da ich diese ms3d nicht oeffnen kann
vielleicht mal in deinem Model die Texturen und zuweisungen kontrollieren ?! _________________
 |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 24.08.2007, 20:37 Titel: |
|
|
ich habe grade mal das original Model bearbeitet und ihm eine andere Textur verpasst. Danach habe ich das Model geöffnet und was passiert?
Nun wird es genau wie meine anderen Grafiken angezeigt: weis.
Folglich muss das Problem an mir und/oder Milkshape liegen oder? |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 24.08.2007, 20:41 Titel: |
|
|
vergleiche doch mal die Pfad+Dateiname Angaben in Milkshape mit dem Original und dem was Du da gemacht hast... _________________
 |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 24.08.2007, 20:51 Titel: |
|
|
Soweit ich das gesehen habe sind die Pfadangaben gleich. |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 24.08.2007, 23:03 Titel: |
|
|
dann stell doch einfach mal alles, was es für das programm braucht zusammen (bitmaps, ms3d-dateien, sourcecode etc., idealerweise in einer rar-datei), vielleicht finden wir dann den fehler.
gruß
Lutz Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 25.08.2007, 09:14 Titel: |
|
|
Lutz Ifer hat Folgendes geschrieben: | dann stell doch einfach mal alles, was es für das programm braucht zusammen |
Hab ich doch also oben der Quellcode dann noch die Dateien:
Caran hat Folgendes geschrieben: | http://www.file-upload.net/download-380469/model.zip.html |
Grüße Caran |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 25.08.2007, 12:06 Titel: |
|
|
Ich habe ein paar fehler gefunden.
Du schreibst beim Laden von dem Model, dass es in Data/G/ ist.
Darf ich davon ausgehen, dass im gleichen Ordner auch die Texturen sind?
Wenn ja, dann ist das der Fehler. Im Model werden die Pfade gespeichert, wo sich die Texturen befinden. Diese sind laut der Model datei im Arbeitsorder, also dort wo sich die .exe befindet. Nach einigen Anpassungen ist es mir gelungen, das Model vollständig texturiert zu sehen.
Ich habe zum einen deinen code um chdir "data/G/" erweitert und ein wenig in milkshapemodel.bi(Model_ReloadTextures und LoadGLTexture) angepasst. So sollte das jetzt alles gehen.
Alle Dateien findest du hier.
MfG
Michael _________________
Code: | #include "signatur.bi" |
Zuletzt bearbeitet von Michael712 am 25.08.2007, 16:11, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 25.08.2007, 12:31 Titel: |
|
|
Ja jetzt funktioniert es bei mir auch!
Vielen vielen Danke! Ohne eure hilfe wäre ich jetzt aus die Maus und ich hätte mein erstes OpenGL Model nie fertig bekommen.
MfG Caran |
|
Nach oben |
|
 |
atari gesperrt
Anmeldungsdatum: 26.08.2007 Beiträge: 144
|
Verfasst am: 26.08.2007, 14:02 Titel: |
|
|
kleine trickserei :
ich habe in der milkshape.bi folgendes geändert :
die for schleife in der "sub model_draw" rausgenommen und dieses zusätzlich in die sub reingesetzt : ByVal i As integer und in der ersten dim "i as integer" rausgenommen.
Code: |
sub Model_Draw(byval pM as MODEL Ptr,ByVal i As integer)
dim j as integer, k as integer
dim texEnabled as GLboolean
dim materialIndex as integer
dim triangleIndex as integer
dim pTri as TRIANGLE ptr
dim index as integer
texEnabled = glIsEnabled (GL_TEXTURE_2D)
'' Draw by group
materialIndex = pM->m_pMeshes[i].m_materialIndex
if materialIndex >= 0 then
..........
..........
|
wenn ich jetzt ein modell aus mehreren einzelteilen habe, kann ich mit der zahl i bestimmen, welches modellteil gerade dargestellt werden soll und dadurch jedem modellteil eine eigene bewegung zuordnen. wenn das ganze modell aus zb 2 körperteilen besteht wird sieht es so aus :
Code: |
glPushMatrix
glRotatef yrot,1.0, 1.0, 0.0
Model_Draw (@MilkShapeModel,0)
glPopMatrix
glPushMatrix
glRotatef xrot,0.0, 1.0, 0.0
Model_Draw (@MilkShapeModel,1)
glPopMatrix
|
und jedem körperteil wird jetzt eine andere drehung zugeordnet.
man krangelenke bauen, man kann die vorderräder vom auto einschlagen also alles geht jetzt in 3d einzeln zu bewegen und brauche nicht ein animiertes md2-format.
natürlich muss man wissen aus wieviel einzelteilen der körper besteht.
dieses is jetzt unbegrenzt ausbaufähig.
man kann auch das eine teil zb mit "glTranslate" verschieben falls es bei der herstellung mit milkshape nicht die richtige position hat oder man kann einen teleskoparm herstellen der ein und ausfahren wird usw...usw..
man kann für das einzelne teil alle opengl-befehle anwenden ohne den gesamten körperverbund zu beeinflussen.
noch etwas :
die anzahl der körperteile bekommt man so : anzahl=pM->m_numMeshes
denke dran beim laden wird von "0" an gezählt. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 27.08.2007, 21:39 Titel: |
|
|
Na das is ja ziemlich cool du. Und es beanworet sogar meine Frage, die ich als nächstes stellen wollte.
MfG Caran |
|
Nach oben |
|
 |
|