001/** 002 * Copyright (c) 2008-2014 Ardor Labs, Inc. 003 * 004 * This file is part of Ardor3D. 005 * 006 * Ardor3D is free software: you can redistribute it and/or modify it 007 * under the terms of its license which may be found in the accompanying 008 * LICENSE file or at <http://www.ardor3d.com/LICENSE>. 009 */ 010 011package com.ardor3d.extension.model.md2; 012 013import com.ardor3d.math.Vector3; 014 015final class Md2Normals { 016 /** Pre-generated md2 normals. See also http://tfc.duke.free.fr/coding/src/anorms.h */ 017 final static float[] NORMALS = { // 018 -0.525731f, 0.000000f, 0.850651f, // 019 -0.442863f, 0.238856f, 0.864188f, // 020 -0.295242f, 0.000000f, 0.955423f, // 021 -0.309017f, 0.500000f, 0.809017f, // 022 -0.162460f, 0.262866f, 0.951056f, // 023 0.000000f, 0.000000f, 1.000000f, // 024 0.000000f, 0.850651f, 0.525731f, // 025 -0.147621f, 0.716567f, 0.681718f, // 026 0.147621f, 0.716567f, 0.681718f, // 027 0.000000f, 0.525731f, 0.850651f, // 028 0.309017f, 0.500000f, 0.809017f, // 029 0.525731f, 0.000000f, 0.850651f, // 030 0.295242f, 0.000000f, 0.955423f, // 031 0.442863f, 0.238856f, 0.864188f, // 032 0.162460f, 0.262866f, 0.951056f, // 033 -0.681718f, 0.147621f, 0.716567f, // 034 -0.809017f, 0.309017f, 0.500000f, // 035 -0.587785f, 0.425325f, 0.688191f, // 036 -0.850651f, 0.525731f, 0.000000f, // 037 -0.864188f, 0.442863f, 0.238856f, // 038 -0.716567f, 0.681718f, 0.147621f, // 039 -0.688191f, 0.587785f, 0.425325f, // 040 -0.500000f, 0.809017f, 0.309017f, // 041 -0.238856f, 0.864188f, 0.442863f, // 042 -0.425325f, 0.688191f, 0.587785f, // 043 -0.716567f, 0.681718f, -0.147621f, // 044 -0.500000f, 0.809017f, -0.309017f, // 045 -0.525731f, 0.850651f, 0.000000f, // 046 0.000000f, 0.850651f, -0.525731f, // 047 -0.238856f, 0.864188f, -0.442863f, // 048 0.000000f, 0.955423f, -0.295242f, // 049 -0.262866f, 0.951056f, -0.162460f, // 050 0.000000f, 1.000000f, 0.000000f, // 051 0.000000f, 0.955423f, 0.295242f, // 052 -0.262866f, 0.951056f, 0.162460f, // 053 0.238856f, 0.864188f, 0.442863f, // 054 0.262866f, 0.951056f, 0.162460f, // 055 0.500000f, 0.809017f, 0.309017f, // 056 0.238856f, 0.864188f, -0.442863f, // 057 0.262866f, 0.951056f, -0.162460f, // 058 0.500000f, 0.809017f, -0.309017f, // 059 0.850651f, 0.525731f, 0.000000f, // 060 0.716567f, 0.681718f, 0.147621f, // 061 0.716567f, 0.681718f, -0.147621f, // 062 0.525731f, 0.850651f, 0.000000f, // 063 0.425325f, 0.688191f, 0.587785f, // 064 0.864188f, 0.442863f, 0.238856f, // 065 0.688191f, 0.587785f, 0.425325f, // 066 0.809017f, 0.309017f, 0.500000f, // 067 0.681718f, 0.147621f, 0.716567f, // 068 0.587785f, 0.425325f, 0.688191f, // 069 0.955423f, 0.295242f, 0.000000f, // 070 1.000000f, 0.000000f, 0.000000f, // 071 0.951056f, 0.162460f, 0.262866f, // 072 0.850651f, -0.525731f, 0.000000f, // 073 0.955423f, -0.295242f, 0.000000f, // 074 0.864188f, -0.442863f, 0.238856f, // 075 0.951056f, -0.162460f, 0.262866f, // 076 0.809017f, -0.309017f, 0.500000f, // 077 0.681718f, -0.147621f, 0.716567f, // 078 0.850651f, 0.000000f, 0.525731f, // 079 0.864188f, 0.442863f, -0.238856f, // 080 0.809017f, 0.309017f, -0.500000f, // 081 0.951056f, 0.162460f, -0.262866f, // 082 0.525731f, 0.000000f, -0.850651f, // 083 0.681718f, 0.147621f, -0.716567f, // 084 0.681718f, -0.147621f, -0.716567f, // 085 0.850651f, 0.000000f, -0.525731f, // 086 0.809017f, -0.309017f, -0.500000f, // 087 0.864188f, -0.442863f, -0.238856f, // 088 0.951056f, -0.162460f, -0.262866f, // 089 0.147621f, 0.716567f, -0.681718f, // 090 0.309017f, 0.500000f, -0.809017f, // 091 0.425325f, 0.688191f, -0.587785f, // 092 0.442863f, 0.238856f, -0.864188f, // 093 0.587785f, 0.425325f, -0.688191f, // 094 0.688191f, 0.587785f, -0.425325f, // 095 -0.147621f, 0.716567f, -0.681718f, // 096 -0.309017f, 0.500000f, -0.809017f, // 097 0.000000f, 0.525731f, -0.850651f, // 098 -0.525731f, 0.000000f, -0.850651f, // 099 -0.442863f, 0.238856f, -0.864188f, // 100 -0.295242f, 0.000000f, -0.955423f, // 101 -0.162460f, 0.262866f, -0.951056f, // 102 0.000000f, 0.000000f, -1.000000f, // 103 0.295242f, 0.000000f, -0.955423f, // 104 0.162460f, 0.262866f, -0.951056f, // 105 -0.442863f, -0.238856f, -0.864188f, // 106 -0.309017f, -0.500000f, -0.809017f, // 107 -0.162460f, -0.262866f, -0.951056f, // 108 0.000000f, -0.850651f, -0.525731f, // 109 -0.147621f, -0.716567f, -0.681718f, // 110 0.147621f, -0.716567f, -0.681718f, // 111 0.000000f, -0.525731f, -0.850651f, // 112 0.309017f, -0.500000f, -0.809017f, // 113 0.442863f, -0.238856f, -0.864188f, // 114 0.162460f, -0.262866f, -0.951056f, // 115 0.238856f, -0.864188f, -0.442863f, // 116 0.500000f, -0.809017f, -0.309017f, // 117 0.425325f, -0.688191f, -0.587785f, // 118 0.716567f, -0.681718f, -0.147621f, // 119 0.688191f, -0.587785f, -0.425325f, // 120 0.587785f, -0.425325f, -0.688191f, // 121 0.000000f, -0.955423f, -0.295242f, // 122 0.000000f, -1.000000f, 0.000000f, // 123 0.262866f, -0.951056f, -0.162460f, // 124 0.000000f, -0.850651f, 0.525731f, // 125 0.000000f, -0.955423f, 0.295242f, // 126 0.238856f, -0.864188f, 0.442863f, // 127 0.262866f, -0.951056f, 0.162460f, // 128 0.500000f, -0.809017f, 0.309017f, // 129 0.716567f, -0.681718f, 0.147621f, // 130 0.525731f, -0.850651f, 0.000000f, // 131 -0.238856f, -0.864188f, -0.442863f, // 132 -0.500000f, -0.809017f, -0.309017f, // 133 -0.262866f, -0.951056f, -0.162460f, // 134 -0.850651f, -0.525731f, 0.000000f, // 135 -0.716567f, -0.681718f, -0.147621f, // 136 -0.716567f, -0.681718f, 0.147621f, // 137 -0.525731f, -0.850651f, 0.000000f, // 138 -0.500000f, -0.809017f, 0.309017f, // 139 -0.238856f, -0.864188f, 0.442863f, // 140 -0.262866f, -0.951056f, 0.162460f, // 141 -0.864188f, -0.442863f, 0.238856f, // 142 -0.809017f, -0.309017f, 0.500000f, // 143 -0.688191f, -0.587785f, 0.425325f, // 144 -0.681718f, -0.147621f, 0.716567f, // 145 -0.442863f, -0.238856f, 0.864188f, // 146 -0.587785f, -0.425325f, 0.688191f, // 147 -0.309017f, -0.500000f, 0.809017f, // 148 -0.147621f, -0.716567f, 0.681718f, // 149 -0.425325f, -0.688191f, 0.587785f, // 150 -0.162460f, -0.262866f, 0.951056f, // 151 0.442863f, -0.238856f, 0.864188f, // 152 0.162460f, -0.262866f, 0.951056f, // 153 0.309017f, -0.500000f, 0.809017f, // 154 0.147621f, -0.716567f, 0.681718f, // 155 0.000000f, -0.525731f, 0.850651f, // 156 0.425325f, -0.688191f, 0.587785f, // 157 0.587785f, -0.425325f, 0.688191f, // 158 0.688191f, -0.587785f, 0.425325f, // 159 -0.955423f, 0.295242f, 0.000000f, // 160 -0.951056f, 0.162460f, 0.262866f, // 161 -1.000000f, 0.000000f, 0.000000f, // 162 -0.850651f, 0.000000f, 0.525731f, // 163 -0.955423f, -0.295242f, 0.000000f, // 164 -0.951056f, -0.162460f, 0.262866f, // 165 -0.864188f, 0.442863f, -0.238856f, // 166 -0.951056f, 0.162460f, -0.262866f, // 167 -0.809017f, 0.309017f, -0.500000f, // 168 -0.864188f, -0.442863f, -0.238856f, // 169 -0.951056f, -0.162460f, -0.262866f, // 170 -0.809017f, -0.309017f, -0.500000f, // 171 -0.681718f, 0.147621f, -0.716567f, // 172 -0.681718f, -0.147621f, -0.716567f, // 173 -0.850651f, 0.000000f, -0.525731f, // 174 -0.688191f, 0.587785f, -0.425325f, // 175 -0.587785f, 0.425325f, -0.688191f, // 176 -0.425325f, 0.688191f, -0.587785f, // 177 -0.425325f, -0.688191f, -0.587785f, // 178 -0.587785f, -0.425325f, -0.688191f, // 179 -0.688191f, -0.587785f, -0.425325f // 180 }; 181 182 public static void getNormalVector(final byte i, final Vector3 store) { 183 final int index = 3 * (i & 0xff); 184 if (index < 0 || index > Md2Normals.NORMALS.length) { 185 store.set(0, 1, 0); 186 } else { 187 store.set(Md2Normals.NORMALS[index + 0], Md2Normals.NORMALS[index + 1], Md2Normals.NORMALS[index + 2]); 188 } 189 } 190}