Mercurial > hg > forks > gldragon
annotate dmscene.h @ 74:99d2c681789f
Use OpenGL extension probing on *NIX as well.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 30 Dec 2019 06:17:07 +0200 |
parents | 1ed7f9d85342 |
children | 9ee0edff3940 |
rev | line source |
---|---|
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 // |
22
03b86b9c2f29
Add copyright blurbs and licenses.
Matti Hamalainen <ccr@tnsp.org>
parents:
21
diff
changeset
|
2 // GLDragon - OpenGL PLY model viewer / simple benchmark |
71 | 3 // -- Scene file handling |
22
03b86b9c2f29
Add copyright blurbs and licenses.
Matti Hamalainen <ccr@tnsp.org>
parents:
21
diff
changeset
|
4 // Programmed and designed by Matti 'ccr' Hämäläinen <ccr@tnsp.org> |
03b86b9c2f29
Add copyright blurbs and licenses.
Matti Hamalainen <ccr@tnsp.org>
parents:
21
diff
changeset
|
5 // (C) Copyright 2019 Tecnic Software productions (TNSP) |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 // |
22
03b86b9c2f29
Add copyright blurbs and licenses.
Matti Hamalainen <ccr@tnsp.org>
parents:
21
diff
changeset
|
7 // See file "COPYING" for license information. |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
8 // |
61
7b138613e2fc
Rename dmmodel.* to dmscene.*
Matti Hamalainen <ccr@tnsp.org>
parents:
56
diff
changeset
|
9 #ifndef DMSCENE_H |
7b138613e2fc
Rename dmmodel.* to dmscene.*
Matti Hamalainen <ccr@tnsp.org>
parents:
56
diff
changeset
|
10 #define DMSCENE_H 1 |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
12 #include "dmutil.h" |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 #include <cstdint> |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
14 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
15 |
70
03aa729a9e90
Refactor PLY file parsing from dmscene.* to dmply.* and some helper functions into dmutil.h
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
16 /* Structures and classes |
03aa729a9e90
Refactor PLY file parsing from dmscene.* to dmply.* and some helper functions into dmutil.h
Matti Hamalainen <ccr@tnsp.org>
parents:
68
diff
changeset
|
17 */ |
21
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
18 struct DMVector3 |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 { |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
20 float x, y, z; |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
21 }; |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
22 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
23 |
25
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
24 union DMVector4 |
21
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
25 { |
25
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
26 struct { float x, y, z, w; } p; |
48
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
27 struct { float r, g, b, a; } c; |
25
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
28 float values[4]; |
21
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
29 }; |
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
30 |
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
31 |
48
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
32 struct DMMaterial |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
33 { |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
34 DMVector4 ambient, diffuse, specular; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
35 int shininess; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
36 }; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
37 |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
38 |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
39 struct DMModel |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
40 { |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
41 int nvertices, nfaces; |
21
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
42 std::vector<DMVector3> vertices, normals; |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
43 std::vector<unsigned int> faces; |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
44 |
48
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
45 DMMaterial material; |
21
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
46 DMVector3 translate, scale, rotate; |
36
d640f2a34031
Only scale/translate/rotate the model if those attributes have been set in the scenefile.
Matti Hamalainen <ccr@tnsp.org>
parents:
32
diff
changeset
|
47 bool translateSet, scaleSet, rotateSet; |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
48 |
68
701bef61dcf1
Remove OpenGL fs/vs shader ids from DMModel, as they are not needed.
Matti Hamalainen <ccr@tnsp.org>
parents:
61
diff
changeset
|
49 unsigned int id_prog; |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
50 |
21
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
51 std::string |
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
52 modelFile, |
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
53 fragShaderFile, vertShaderFile, |
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
54 fragShaderStr, vertShaderStr; |
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
55 |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
56 DMModel() |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
57 { |
21
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
58 nfaces = nvertices = 0; |
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
59 |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
60 translate.x = translate.y = translate.z = 0; |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
61 rotate.x = rotate.y = rotate.z = 0; |
36
d640f2a34031
Only scale/translate/rotate the model if those attributes have been set in the scenefile.
Matti Hamalainen <ccr@tnsp.org>
parents:
32
diff
changeset
|
62 scale.x = scale.y = scale.z = 0; |
d640f2a34031
Only scale/translate/rotate the model if those attributes have been set in the scenefile.
Matti Hamalainen <ccr@tnsp.org>
parents:
32
diff
changeset
|
63 translateSet = rotateSet = scaleSet = false; |
32
1215fdd0a8ab
Add support for specifying specular and shininess values per model.
Matti Hamalainen <ccr@tnsp.org>
parents:
25
diff
changeset
|
64 |
48
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
65 material.diffuse.c.r = material.diffuse.p.z = 0.56471f; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
66 material.diffuse.c.g = 0.5f; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
67 material.diffuse.c.a = 1.0f; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
68 |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
69 material.specular.c.r = material.specular.c.g = material.specular.c.b = 0.8f; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
70 material.specular.c.a = 1.0f; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
71 |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
72 material.shininess = 96; |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
73 } |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
74 }; |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
75 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
76 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
77 struct DMLight |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
78 { |
48
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
79 DMMaterial color; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
80 DMVector4 position, pointAt; |
25
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
81 |
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
82 DMLight() |
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
83 { |
48
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
84 color.ambient.c.r = color.ambient.c.g = color.ambient.p.z = 0.2f; color.ambient.c.a = 1.0f; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
85 color.diffuse.c.r = color.diffuse.c.g = color.diffuse.p.z = 0.8f; color.diffuse.c.a = 1.0f; |
0ae1ff609626
Implement diffuse setting for models in scenefile. Also refactor
Matti Hamalainen <ccr@tnsp.org>
parents:
37
diff
changeset
|
86 color.specular.c.r = color.specular.c.g = color.specular.p.z = 0.5f; color.specular.c.a = 1.0f; |
25
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
87 |
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
88 position.p.x = 10.0f; |
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
89 position.p.y = 10.0f; |
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
90 position.p.z = 0.0f; |
56
8b335eb444ae
Initialize light position.w.
Matti Hamalainen <ccr@tnsp.org>
parents:
48
diff
changeset
|
91 position.p.w = 0.0f; |
25
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
92 } |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
93 }; |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
94 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
95 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
96 struct DMCamera |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
97 { |
25
2403030a0352
"Finish" implementing multiple lights support in scene files.
Matti Hamalainen <ccr@tnsp.org>
parents:
22
diff
changeset
|
98 DMVector4 position, pointAt; |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
99 }; |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
100 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
101 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
102 struct DMSimpleScene |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
103 { |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
104 DMCamera camera; |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
105 std::vector<DMLight> lights; |
21
1404dfcee7b8
More work on scenefile and model loading support.
Matti Hamalainen <ccr@tnsp.org>
parents:
19
diff
changeset
|
106 std::vector<DMModel> models; |
19
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
107 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
108 bool loadInfo(const std::string &filename); |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
109 }; |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
110 |
a329f0216491
Implement PLY file format parsing and extremely simplistic scene setup file format.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
111 #endif |