cdef several int/float variables

This commit is contained in:
David Vierra 2015-01-03 13:32:04 -10:00
parent c23cad678b
commit 1e80460405
3 changed files with 34 additions and 16 deletions

View File

@ -1,12 +1,17 @@
""" """
blockmodels blockmodels
""" """
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, print_function
import json import json
import logging import logging
import math import math
import numpy import numpy
cimport numpy
from cpython cimport array
from array import array
from mceditlib import faces from mceditlib import faces
from mceditlib.geometry import Vector, FloatBox from mceditlib.geometry import Vector, FloatBox
@ -211,6 +216,9 @@ class BlockModels(object):
def cookQuads(self, textureAtlas): def cookQuads(self, textureAtlas):
cookedModels = {} cookedModels = {}
cookedModelsByID = {} cookedModelsByID = {}
cdef int l, t, w, h
cdef int u1, u2, v1, v2
cdef int uw, vh
for nameAndState, allQuads in self.modelQuads.iteritems(): for nameAndState, allQuads in self.modelQuads.iteritems():
cookedQuads = [] cookedQuads = []
for (box, face, texture, uv, cullface, shade, rotation, textureRotation, for (box, face, texture, uv, cullface, shade, rotation, textureRotation,
@ -218,14 +226,14 @@ class BlockModels(object):
l, t, w, h = textureAtlas.texCoordsByName[texture] l, t, w, h = textureAtlas.texCoordsByName[texture]
u1, v1, u2, v2 = uv u1, v1, u2, v2 = uv
uw = (u2 - u1) / 16 uw = (w * (u2 - u1)) / 16
vh = (v2 - v1) / 16 vh = (h * (v2 - v1)) / 16
u1 += l u1 += l
u2 = u1 + uw * w u2 = u1 + uw
# flip v axis - texcoords origin is top left but model uv origin is from bottom left # flip v axis - texcoords origin is top left but model uv origin is from bottom left
v1 = t + h - v1 v1 = t + h - v1
v2 = v1 - vh * w v2 = v1 - vh
uv = (u1, v1, u2, v2) uv = (u1, v1, u2, v2)
@ -376,8 +384,10 @@ faceShades = {
} }
def getBlockFaceVertices(box, face, uv, textureRotation): cdef getBlockFaceVertices(box, face, tuple uv, textureRotation):
x1, y1, z1, = box.origin cdef float x1, y1, z1, x2, y2, z2,
cdef int u1, v1, u2, v2
x1, y1, z1 = box.origin
x2, y2, z2 = box.maximum x2, y2, z2 = box.maximum
u1, v1, u2, v2 = uv u1, v1, u2, v2 = uv
tc = [ tc = [

View File

@ -2,9 +2,11 @@
${NAME} ${NAME}
""" """
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import itertools
import logging import logging
import numpy import numpy
cimport numpy
from mcedit2.rendering import renderstates from mcedit2.rendering import renderstates
from mcedit2.rendering.vertexarraybuffer import VertexArrayBuffer from mcedit2.rendering.vertexarraybuffer import VertexArrayBuffer
@ -25,6 +27,11 @@ class BlockModelMesh(object):
self.vertexArrays = [] self.vertexArrays = []
def createVertexArrays(self): def createVertexArrays(self):
cdef numpy.ndarray[numpy.uint16_t, ndim=3] areaBlocks
#cdef numpy.ndarray[numpy.uint8_t, ndim=3] data
cdef numpy.ndarray[numpy.uint8_t, ndim=1] renderType
cdef numpy.ndarray[numpy.uint8_t, ndim=1] opaqueCube
chunk = self.sectionUpdate.chunkUpdate.chunk chunk = self.sectionUpdate.chunkUpdate.chunk
cx, cz = chunk.chunkPosition cx, cz = chunk.chunkPosition
cy = self.sectionUpdate.cy cy = self.sectionUpdate.cy
@ -35,6 +42,10 @@ class BlockModelMesh(object):
blockModels = self.sectionUpdate.chunkUpdate.updateTask.textureAtlas.blockModels blockModels = self.sectionUpdate.chunkUpdate.updateTask.textureAtlas.blockModels
blocktypes = self.sectionUpdate.blocktypes blocktypes = self.sectionUpdate.blocktypes
areaBlocks = self.sectionUpdate.areaBlocks areaBlocks = self.sectionUpdate.areaBlocks
data = section.Data
renderType = self.sectionUpdate.renderType
opaqueCube = blocktypes.opaqueCube
faceQuadVerts = [] faceQuadVerts = []
cdef unsigned short y, z, x, ID, meta cdef unsigned short y, z, x, ID, meta
@ -47,10 +58,9 @@ class BlockModelMesh(object):
ID = areaBlocks[y, z, x] ID = areaBlocks[y, z, x]
if ID == 0: if ID == 0:
continue continue
meta = section.Data[y-1, z-1, x-1] meta = data[y-1, z-1, x-1]
block = blocktypes[ID, meta] if renderType[ID] != 3: # only model blocks for now
if block.renderType != 3: # only model blocks for now
continue continue
quads = blockModels.cookedModelsByID.get((ID, meta)) quads = blockModels.cookedModelsByID.get((ID, meta))
if quads is None: if quads is None:
@ -63,10 +73,8 @@ class BlockModelMesh(object):
ny = y + dy ny = y + dy
nz = z + dz nz = z + dz
nID = areaBlocks[ny, nz, nx] nID = areaBlocks[ny, nz, nx]
if nID != 0: if opaqueCube[nID]:
nBlock = blocktypes[nID] continue
if nBlock.opaqueCube:
continue
verts = numpy.array(xyzuvc) verts = numpy.array(xyzuvc)
verts.shape = 1, 4, 6 verts.shape = 1, 4, 6

View File

@ -108,7 +108,7 @@ class BlockTypeSet(object):
self.mapColor = numpy.zeros((id_limit, 16, 3), dtype='uint8') self.mapColor = numpy.zeros((id_limit, 16, 3), dtype='uint8')
self.mapColor[:] = 0xFF self.mapColor[:] = 0xFF
self.opaqueCube = numpy.ones((id_limit, ), dtype='bool') self.opaqueCube = numpy.ones((id_limit, ), dtype='uint8')
self.opaqueCube[0] = 0 self.opaqueCube[0] = 0
self.name = "Unnamed Set" self.name = "Unnamed Set"