annotate Renderer/Engine/spe/CreatePolygon.cc @ 898:302ebfc75a79 draft

merge
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 16 Jul 2010 19:00:49 +0900
parents 1cc2b1ae4f05
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
862
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
1 #include "CreatePolygon.h"
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
2
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
3 SchedDefineTask(CreatePolygon);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
4
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
5 static void
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
6 ApplyMatrix(float *v, float *m)
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
7 {
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
8 float t[4];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
9
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
10 t[0] = v[0];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
11 t[1] = v[1];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
12 t[2] = v[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
13 t[3] = v[3];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
14
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
15 for (int i = 0; i < 4; i++) {
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
16 v[i] = t[0]*m[i] + t[1]*m[i+4] + t[2]*m[i+8] + t[3]*m[i+12];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
17 }
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
18 }
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
19
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
20 static void
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
21 ApplyNormalMatrix(float *v, float *m)
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
22 {
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
23 float t[4];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
24
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
25 t[0] = v[0];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
26 t[1] = v[1];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
27 t[2] = v[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
28
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
29 for (int i = 0; i < 3; i++) {
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
30 v[i] = t[0]*m[i] + t[1]*m[i+4] + t[2]*m[i+8];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
31 }
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
32 }
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
33
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
34
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
35 static int
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
36 run(SchedTask *smanager, void *rbuf, void *wbuf)
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
37 {
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
38
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
39 TrianglePack *sg_tri = (TrianglePack*)smanager->get_input(0);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
40 texture_list *sg_texture_info = (texture_list*)smanager->get_input(1);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
41 float *sg_matrix = (float*)smanager->get_input(2);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
42 TrianglePack *pp_tri = (TrianglePack*)smanager->get_output(0);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
43 int *tri_num = (int*)smanager->get_param(0);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
44
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
45 float *matrix = sg_matrix;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
46 float *real_matrix = sg_matrix + 16;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
47
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
48 float xyz1[4], xyz2[4], xyz3[4];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
49 float normal1[4],normal2[4],normal3[4];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
50
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
51 for (int i = 0; i < *tri_num; i++) {
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
52
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
53 TrianglePack *pp_cur_tri = &pp_tri[i];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
54 TrianglePack *sg_cur_tri = &sg_tri[i];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
55
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
56 xyz1[0] = sg_cur_tri->ver1.x;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
57 xyz1[1] = sg_cur_tri->ver1.y;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
58 xyz1[2] = sg_cur_tri->ver1.z*-1.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
59 xyz1[3] = 1.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
60
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
61 xyz2[0] = sg_cur_tri->ver2.x;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
62 xyz2[1] = sg_cur_tri->ver2.y;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
63 xyz2[2] = sg_cur_tri->ver2.z*-1.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
64 xyz2[3] = 1.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
65
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
66 xyz3[0] = sg_cur_tri->ver3.x;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
67 xyz3[1] = sg_cur_tri->ver3.y;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
68 xyz3[2] = sg_cur_tri->ver3.z*-1.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
69 xyz3[3] = 1.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
70
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
71 // matrix = 回転行列*透視変換行列
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
72 ApplyMatrix(xyz1, matrix);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
73 ApplyMatrix(xyz2, matrix);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
74 ApplyMatrix(xyz3, matrix);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
75
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
76 xyz1[0] /= xyz1[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
77 xyz1[1] /= xyz1[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
78 xyz2[0] /= xyz2[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
79 xyz2[1] /= xyz2[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
80 xyz3[0] /= xyz3[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
81 xyz3[1] /= xyz3[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
82
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
83 pp_cur_tri->ver1.x = xyz1[0];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
84 pp_cur_tri->ver1.y = xyz1[1];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
85 pp_cur_tri->ver1.z = xyz1[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
86 pp_cur_tri->ver1.tex_x = sg_cur_tri->ver1.tex_x;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
87 pp_cur_tri->ver1.tex_y = sg_cur_tri->ver1.tex_y;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
88
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
89 pp_cur_tri->ver2.x = xyz2[0];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
90 pp_cur_tri->ver2.y = xyz2[1];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
91 pp_cur_tri->ver2.z = xyz2[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
92 pp_cur_tri->ver2.tex_x = sg_cur_tri->ver2.tex_x;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
93 pp_cur_tri->ver2.tex_y = sg_cur_tri->ver2.tex_y;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
94
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
95 pp_cur_tri->ver3.x = xyz3[0];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
96 pp_cur_tri->ver3.y = xyz3[1];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
97 pp_cur_tri->ver3.z = xyz3[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
98 pp_cur_tri->ver3.tex_x = sg_cur_tri->ver3.tex_x;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
99 pp_cur_tri->ver3.tex_y = sg_cur_tri->ver3.tex_y;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
100
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
101 normal1[0] = sg_cur_tri->normal1.x;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
102 normal1[1] = sg_cur_tri->normal1.y;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
103 normal1[2] = sg_cur_tri->normal1.z*-1.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
104 normal1[3] = 0.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
105
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
106 normal1[0] = sg_cur_tri->normal2.x;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
107 normal1[1] = sg_cur_tri->normal2.y;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
108 normal1[2] = sg_cur_tri->normal2.z*-1.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
109 normal1[3] = 0.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
110
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
111 normal1[0] = sg_cur_tri->normal3.x;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
112 normal1[1] = sg_cur_tri->normal3.y;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
113 normal1[2] = sg_cur_tri->normal3.z*-1.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
114 normal1[3] = 0.0f;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
115
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
116 ApplyNormalMatrix(normal1,real_matrix);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
117 ApplyNormalMatrix(normal2,real_matrix);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
118 ApplyNormalMatrix(normal3,real_matrix);
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
119
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
120 normal1[0] /= normal1[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
121 normal1[1] /= normal1[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
122
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
123 normal2[0] /= normal2[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
124 normal2[1] /= normal2[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
125
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
126 normal3[0] /= normal3[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
127 normal3[1] /= normal3[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
128
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
129 pp_cur_tri->normal1.x = normal1[0];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
130 pp_cur_tri->normal1.y = normal1[1];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
131 pp_cur_tri->normal1.z = normal1[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
132
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
133 pp_cur_tri->normal2.x = normal2[0];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
134 pp_cur_tri->normal2.y = normal2[1];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
135 pp_cur_tri->normal2.z = normal2[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
136
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
137 pp_cur_tri->normal3.x = normal3[0];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
138 pp_cur_tri->normal3.y = normal3[1];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
139 pp_cur_tri->normal3.z = normal3[2];
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
140
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
141 pp_cur_tri->tex_info.addr = sg_texture_info->pixels;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
142 pp_cur_tri->tex_info.width = sg_texture_info->t_w;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
143 pp_cur_tri->tex_info.height = sg_texture_info->t_h;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
144 pp_cur_tri->tex_info.scale_max = sg_texture_info->scale_max;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
145
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
146 }
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
147
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
148 return 0;
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
149
1cc2b1ae4f05 add file
yutaka@localhost.localdomain
parents:
diff changeset
150 }