source: src/materials/_normalisationCubemap.pym @ 1241:537ca1099be0

Revision 1241:537ca1099be0, 5.0 KB checked in by Arc Riley <arcriley@…>, 7 years ago (diff)

Ticket #955 :

  • the normalisation cubemap is now completely internal to soy.materials
Line 
1# PySoy's materials._normalisationCubemap function
2#
3# Copyright (C) 2006,2007,2008 PySoy Group
4#
5#  This program is free software; you can redistribute it and/or modify
6#  it under the terms of the GNU Affero General Public License as published
7#  by the Free Software Foundation, either version 3 of the License, or
8#  (at your option) any later version.
9#
10#  This program is distributed in the hope that it will be useful,
11#  but WITHOUT ANY WARRANTY; without even the implied warranty of
12#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13#  GNU Affero General Public License for more details.
14#
15#  You should have received a copy of the GNU Affero General Public License
16#  along with this program; if not, see http://www.gnu.org/licenses
17#
18# $Id: _normalisationCubemap.pym 1287 2008-05-20 05:17:04Z ArcRiley $
19
20cimport stdlib
21cimport soy.textures
22
23cdef void _normalisationCubemap(soy.textures.Texture _cubemap) :
24  cdef int _i, _j
25  cdef float _length
26  cdef float _vector[3]
27  cdef unsigned char* _ptr
28
29  _cubemap._resize(1, 3, 32, 32, 6)
30  _ptr = _cubemap._texels
31
32  # +X
33  for _j from 0 < _j <= 32:
34    for _i from 0 < _i <= 32:
35      _vector[0] =  16.0
36      _vector[1] = -(_j + 0.5 - 16.0)
37      _vector[2] = -(_i + 0.5 - 16.0)
38
39      _length = stdlib.sqrtf( _vector[0] * _vector[0] +
40                              _vector[1] * _vector[1] +
41                              _vector[2] * _vector[2] )
42
43      _vector[0] = 0.5 * (_vector[0] / _length) + 0.5
44      _vector[1] = 0.5 * (_vector[1] / _length) + 0.5
45      _vector[2] = 0.5 * (_vector[2] / _length) + 0.5
46
47      _ptr[0] = <unsigned char> (_vector[0] * 255)
48      _ptr[1] = <unsigned char> (_vector[1] * 255)
49      _ptr[2] = <unsigned char> (_vector[2] * 255)
50      _ptr = _ptr + 3
51
52
53  # -X
54  for _j from 0 < _j <= 32:
55    for _i from 0 < _i <= 32:
56      _vector[0] = -16.0
57      _vector[1] = -(_j + 0.5 - 16.0)
58      _vector[2] =  (_i + 0.5 - 16.0)
59
60      _length = stdlib.sqrtf( _vector[0] * _vector[0] +
61                              _vector[1] * _vector[1] +
62                              _vector[2] * _vector[2] )
63
64      _vector[0] = 0.5 * (_vector[0] / _length) + 0.5
65      _vector[1] = 0.5 * (_vector[1] / _length) + 0.5
66      _vector[2] = 0.5 * (_vector[2] / _length) + 0.5
67
68      _ptr[0] = <unsigned char> (_vector[0] * 255)
69      _ptr[1] = <unsigned char> (_vector[1] * 255)
70      _ptr[2] = <unsigned char> (_vector[2] * 255)
71      _ptr = _ptr + 3
72
73
74  # +Y
75  for _j from 0 < _j <= 32:
76    for _i from 0 < _i <= 32:
77      _vector[0] =  (_i + 0.5 - 16.0)
78      _vector[1] =  16.0
79      _vector[2] =  (_j + 0.5 - 16.0)
80
81      _length = stdlib.sqrtf( _vector[0] * _vector[0] +
82                              _vector[1] * _vector[1] +
83                              _vector[2] * _vector[2] )
84
85      _vector[0] = 0.5 * (_vector[0] / _length) + 0.5
86      _vector[1] = 0.5 * (_vector[1] / _length) + 0.5
87      _vector[2] = 0.5 * (_vector[2] / _length) + 0.5
88
89      _ptr[0] = <unsigned char> (_vector[0] * 255)
90      _ptr[1] = <unsigned char> (_vector[1] * 255)
91      _ptr[2] = <unsigned char> (_vector[2] * 255)
92      _ptr = _ptr + 3
93   
94
95  # -Y
96  for _j from 0 < _j <= 32:
97    for _i from 0 < _i <= 32:
98      _vector[0] =  (_i + 0.5 - 16.0)
99      _vector[1] = -16.0
100      _vector[2] = -(_j + 0.5 - 16.0)
101
102      _length = stdlib.sqrtf( _vector[0] * _vector[0] +
103                              _vector[1] * _vector[1] +
104                              _vector[2] * _vector[2] )
105
106      _vector[0] = 0.5 * (_vector[0] / _length) + 0.5
107      _vector[1] = 0.5 * (_vector[1] / _length) + 0.5
108      _vector[2] = 0.5 * (_vector[2] / _length) + 0.5
109
110      _ptr[0] = <unsigned char> (_vector[0] * 255)
111      _ptr[1] = <unsigned char> (_vector[1] * 255)
112      _ptr[2] = <unsigned char> (_vector[2] * 255)
113      _ptr = _ptr + 3
114
115
116  # +Z
117  for _j from 0 < _j <= 32:
118    for _i from 0 < _i <= 32:
119      _vector[0] =  (_i + 0.5 - 16.0)
120      _vector[1] = -(_j + 0.5 - 16.0)
121      _vector[2] =  16.0
122
123      _length = stdlib.sqrtf( _vector[0] * _vector[0] +
124                              _vector[1] * _vector[1] +
125                              _vector[2] * _vector[2] )
126
127      _vector[0] = 0.5 * (_vector[0] / _length) + 0.5
128      _vector[1] = 0.5 * (_vector[1] / _length) + 0.5
129      _vector[2] = 0.5 * (_vector[2] / _length) + 0.5
130
131      _ptr[0] = <unsigned char> (_vector[0] * 255)
132      _ptr[1] = <unsigned char> (_vector[1] * 255)
133      _ptr[2] = <unsigned char> (_vector[2] * 255)
134      _ptr = _ptr + 3
135   
136
137  # -Z
138  for _j from 0 < _j <= 32:
139    for _i from 0 < _i <= 32:
140      _vector[0] = -(_i + 0.5 - 16.0)
141      _vector[1] = -(_j + 0.5 - 16.0)
142      _vector[2] = -16.0
143
144      _length = stdlib.sqrtf( _vector[0] * _vector[0] +
145                              _vector[1] * _vector[1] +
146                              _vector[2] * _vector[2] )
147
148      _vector[0] = 0.5 * (_vector[0] / _length) + 0.5
149      _vector[1] = 0.5 * (_vector[1] / _length) + 0.5
150      _vector[2] = 0.5 * (_vector[2] / _length) + 0.5
151
152      _ptr[0] = <unsigned char> (_vector[0] * 255)
153      _ptr[1] = <unsigned char> (_vector[1] * 255)
154      _ptr[2] = <unsigned char> (_vector[2] * 255)
155      _ptr = _ptr + 3
Note: See TracBrowser for help on using the repository browser.