mirror of https://github.com/axmolengine/axmol.git
culling working for both 2d and 3d projections
This commit is contained in:
parent
fe1160cd8c
commit
04460750b8
17
CHANGELOG
17
CHANGELOG
|
@ -1,12 +1,19 @@
|
||||||
cocos2d-x-3.0rc0 Feb.?? 2014
|
cocos2d-x-3.0rc0 Feb.?? 2014
|
||||||
[All]
|
[All]
|
||||||
[NEW] Adds more console commands: director resume|pause|stopanimation|startanimation.
|
[NEW] Action: RotateBy supports 3D rotations
|
||||||
[NEW] Adds Dutch Language support.
|
[NEW] Bindings: Using python to automatically generate script bindings
|
||||||
|
[NEW] Bindings: Added JS bindings support for Linux
|
||||||
[NEW] Console: Added 'resolution', 'projection' commands. Improved API
|
[NEW] Console: Added 'resolution', 'projection' commands. Improved API
|
||||||
|
[NEW] Console: Added more commands: director resume|pause|stopanimation|startanimation.
|
||||||
[NEW] Director: Displays 'Vertices drawn' in the stats. Useful to measure performance.
|
[NEW] Director: Displays 'Vertices drawn' in the stats. Useful to measure performance.
|
||||||
[NEW] Using python to automatically generate script bindings codes.
|
[NEW] Node: Added set/get Position3D() and set/get Rotation3D()
|
||||||
[NEW] Linux javascript bindings support.
|
Node: Calculates rotation X and Y correctly.
|
||||||
|
Node: set/get VertexZ() -> set/get PositionZ()
|
||||||
|
Node: setRotationX() -> setRotationSkewX()
|
||||||
|
Node: setRotationY() -> setRotationSkewY()
|
||||||
|
[NEW] Language: Added Dutch support.
|
||||||
|
[NEW] Sprite: Added auto-culling support
|
||||||
|
|
||||||
[FIX] Character would not be aligned on the baseline when label using distance field.
|
[FIX] Character would not be aligned on the baseline when label using distance field.
|
||||||
[FIX] Adds a macro to disable inserting script binding relevant codes.
|
[FIX] Adds a macro to disable inserting script binding relevant codes.
|
||||||
[FIX] Removing child from TMXLayer may cause crash.
|
[FIX] Removing child from TMXLayer may cause crash.
|
||||||
|
|
|
@ -448,18 +448,19 @@ void Director::setProjection(Projection projection)
|
||||||
|
|
||||||
// issue #1334
|
// issue #1334
|
||||||
kmMat4PerspectiveProjection(&matrixPerspective, 60, (GLfloat)size.width/size.height, 10, zeye+size.height/2);
|
kmMat4PerspectiveProjection(&matrixPerspective, 60, (GLfloat)size.width/size.height, 10, zeye+size.height/2);
|
||||||
// kmMat4PerspectiveProjection( &matrixPerspective, 60, (GLfloat)size.width/size.height, 0.1f, 1500);
|
// kmMat4PerspectiveProjection( &matrixPerspective, 60, (GLfloat)size.width/size.height, 0.1f, 1500);
|
||||||
|
|
||||||
kmGLMultMatrix(&matrixPerspective);
|
kmGLMultMatrix(&matrixPerspective);
|
||||||
|
|
||||||
kmGLMatrixMode(KM_GL_MODELVIEW);
|
|
||||||
kmGLLoadIdentity();
|
|
||||||
kmVec3 eye, center, up;
|
kmVec3 eye, center, up;
|
||||||
kmVec3Fill(&eye, size.width/2, size.height/2, zeye);
|
kmVec3Fill(&eye, size.width/2, size.height/2, zeye);
|
||||||
kmVec3Fill(¢er, size.width/2, size.height/2, 0.0f);
|
kmVec3Fill(¢er, size.width/2, size.height/2, 0.0f);
|
||||||
kmVec3Fill(&up, 0.0f, 1.0f, 0.0f);
|
kmVec3Fill(&up, 0.0f, 1.0f, 0.0f);
|
||||||
kmMat4LookAt(&matrixLookup, &eye, ¢er, &up);
|
kmMat4LookAt(&matrixLookup, &eye, ¢er, &up);
|
||||||
kmGLMultMatrix(&matrixLookup);
|
kmGLMultMatrix(&matrixLookup);
|
||||||
|
|
||||||
|
kmGLMatrixMode(KM_GL_MODELVIEW);
|
||||||
|
kmGLLoadIdentity();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -352,8 +352,15 @@ public:
|
||||||
virtual void setPositionY(float y);
|
virtual void setPositionY(float y);
|
||||||
virtual float getPositionY(void) const;
|
virtual float getPositionY(void) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the X, Y, and Z axis position
|
||||||
|
*/
|
||||||
virtual void setPosition3D(const Vertex3F& position);
|
virtual void setPosition3D(const Vertex3F& position);
|
||||||
|
/**
|
||||||
|
* returns the X, Y and Z axis position
|
||||||
|
*/
|
||||||
virtual Vertex3F getPosition3D() const;
|
virtual Vertex3F getPosition3D() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the 'z' axis in the position. It is the OpenGL Z vertex value.
|
* Sets the 'z' axis in the position. It is the OpenGL Z vertex value.
|
||||||
*
|
*
|
||||||
|
@ -391,13 +398,16 @@ public:
|
||||||
/**
|
/**
|
||||||
* Changes the X skew angle of the node in degrees.
|
* Changes the X skew angle of the node in degrees.
|
||||||
*
|
*
|
||||||
|
* The difference between `setRotationalSkew()` and `setSkew()` is that the first one simulate Flash's skew functionality
|
||||||
|
* while the second one uses the real skew funciton.
|
||||||
|
*
|
||||||
* This angle describes the shear distortion in the X direction.
|
* This angle describes the shear distortion in the X direction.
|
||||||
* Thus, it is the angle between the Y axis and the left edge of the shape
|
* Thus, it is the angle between the Y axis and the left edge of the shape
|
||||||
* The default skewX angle is 0. Positive values distort the node in a CW direction.
|
* The default skewX angle is 0. Positive values distort the node in a CW direction.
|
||||||
*
|
*
|
||||||
* @param fSkewX The X skew angle of the node in degrees.
|
* @param skewX The X skew angle of the node in degrees.
|
||||||
*/
|
*/
|
||||||
virtual void setSkewX(float fSkewX);
|
virtual void setSkewX(float skewX);
|
||||||
/**
|
/**
|
||||||
* Returns the X skew angle of the node in degrees.
|
* Returns the X skew angle of the node in degrees.
|
||||||
*
|
*
|
||||||
|
@ -411,13 +421,16 @@ public:
|
||||||
/**
|
/**
|
||||||
* Changes the Y skew angle of the node in degrees.
|
* Changes the Y skew angle of the node in degrees.
|
||||||
*
|
*
|
||||||
|
* The difference between `setRotationalSkew()` and `setSkew()` is that the first one simulate Flash's skew functionality
|
||||||
|
* while the second one uses the real skew funciton.
|
||||||
|
*
|
||||||
* This angle describes the shear distortion in the Y direction.
|
* This angle describes the shear distortion in the Y direction.
|
||||||
* Thus, it is the angle between the X axis and the bottom edge of the shape
|
* Thus, it is the angle between the X axis and the bottom edge of the shape
|
||||||
* The default skewY angle is 0. Positive values distort the node in a CCW direction.
|
* The default skewY angle is 0. Positive values distort the node in a CCW direction.
|
||||||
*
|
*
|
||||||
* @param fSkewY The Y skew angle of the node in degrees.
|
* @param skewY The Y skew angle of the node in degrees.
|
||||||
*/
|
*/
|
||||||
virtual void setSkewY(float fSkewY);
|
virtual void setSkewY(float skewY);
|
||||||
/**
|
/**
|
||||||
* Returns the Y skew angle of the node in degrees.
|
* Returns the Y skew angle of the node in degrees.
|
||||||
*
|
*
|
||||||
|
@ -514,12 +527,22 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual float getRotation() const;
|
virtual float getRotation() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the X, Y and Z axis rotation
|
||||||
|
* Useful for 3d rotations
|
||||||
|
*/
|
||||||
virtual void setRotation3D(const Vertex3F& rotation);
|
virtual void setRotation3D(const Vertex3F& rotation);
|
||||||
|
/**
|
||||||
|
* returns the X, Y and Z axis rotation
|
||||||
|
*/
|
||||||
virtual Vertex3F getRotation3D() const;
|
virtual Vertex3F getRotation3D() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the X rotation (angle) of the node in degrees which performs a horizontal rotational skew.
|
* Sets the X rotation (angle) of the node in degrees which performs a horizontal rotational skew.
|
||||||
*
|
*
|
||||||
|
* The difference between setRotationalSkew() and setSkew() is that the first one simulate Flash's skew functionality
|
||||||
|
* while the second one uses the real skew funciton.
|
||||||
|
*
|
||||||
* 0 is the default rotation angle.
|
* 0 is the default rotation angle.
|
||||||
* Positive values rotate node clockwise, and negative values for anti-clockwise.
|
* Positive values rotate node clockwise, and negative values for anti-clockwise.
|
||||||
*
|
*
|
||||||
|
@ -541,6 +564,9 @@ public:
|
||||||
/**
|
/**
|
||||||
* Sets the Y rotation (angle) of the node in degrees which performs a vertical rotational skew.
|
* Sets the Y rotation (angle) of the node in degrees which performs a vertical rotational skew.
|
||||||
*
|
*
|
||||||
|
* The difference between setRotationalSkew() and setSkew() is that the first one simulate Flash's skew functionality
|
||||||
|
* while the second one uses the real skew funciton.
|
||||||
|
*
|
||||||
* 0 is the default rotation angle.
|
* 0 is the default rotation angle.
|
||||||
* Positive values rotate node clockwise, and negative values for anti-clockwise.
|
* Positive values rotate node clockwise, and negative values for anti-clockwise.
|
||||||
*
|
*
|
||||||
|
|
|
@ -599,7 +599,7 @@ void Sprite::updateTransform(void)
|
||||||
Point( _quad.tr.vertices.x, _quad.tr.vertices.y ),
|
Point( _quad.tr.vertices.x, _quad.tr.vertices.y ),
|
||||||
Point( _quad.tl.vertices.x, _quad.tl.vertices.y ),
|
Point( _quad.tl.vertices.x, _quad.tl.vertices.y ),
|
||||||
};
|
};
|
||||||
ccDrawPoly(vertices, 4, true);
|
DrawPrimitives::drawPoly(vertices, 4, true);
|
||||||
#endif // CC_SPRITE_DEBUG_DRAW
|
#endif // CC_SPRITE_DEBUG_DRAW
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -618,19 +618,27 @@ void Sprite::draw(void)
|
||||||
bool Sprite::culling() const
|
bool Sprite::culling() const
|
||||||
{
|
{
|
||||||
Size s = Director::getInstance()->getWinSize();
|
Size s = Director::getInstance()->getWinSize();
|
||||||
kmVec3 v3 = {_contentSize.width*0.5f, _contentSize.height*0.5f, 0};
|
float hcsx = _contentSize.width * 0.5f;
|
||||||
kmVec3Transform(&v3, &v3, &_modelViewTransform);
|
float hcsy = _contentSize.height * 0.5f;
|
||||||
|
|
||||||
float cshw = _contentSize.width * fmaxf(fabsf(_modelViewTransform.mat[0] + _modelViewTransform.mat[4]), fabsf(_modelViewTransform.mat[0] - _modelViewTransform.mat[4]));
|
// convert to world coordinates
|
||||||
float cshh = _contentSize.height * fmaxf(fabsf(_modelViewTransform.mat[1] + _modelViewTransform.mat[5]), fabsf(_modelViewTransform.mat[1] - _modelViewTransform.mat[5]));
|
float x = hcsx * _modelViewTransform.mat[0] + hcsy * _modelViewTransform.mat[4] + _modelViewTransform.mat[12];
|
||||||
|
float y = hcsx * _modelViewTransform.mat[1] + hcsy * _modelViewTransform.mat[5] + _modelViewTransform.mat[13];
|
||||||
|
|
||||||
return ( (fabsf(v3.x)-cshw) < s.width/2 && (fabsf(v3.y)-cshh) < s.height/2);
|
// center of screen is (0,0)
|
||||||
|
x -= s.width/2;
|
||||||
|
y -= s.height/2;
|
||||||
|
|
||||||
|
// convert content size to world coordinates
|
||||||
|
float wchw = hcsx * fmaxf(fabsf(_modelViewTransform.mat[0] + _modelViewTransform.mat[4]), fabsf(_modelViewTransform.mat[0] - _modelViewTransform.mat[4]));
|
||||||
|
float wchh = hcsy * fmaxf(fabsf(_modelViewTransform.mat[1] + _modelViewTransform.mat[5]), fabsf(_modelViewTransform.mat[1] - _modelViewTransform.mat[5]));
|
||||||
|
|
||||||
|
float tmpx = (fabsf(x)-wchw);
|
||||||
|
float tmpy = (fabsf(y)-wchh);
|
||||||
|
return (tmpx < s.width/2 && tmpy < s.height/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Node overrides
|
// Node overrides
|
||||||
|
|
||||||
void Sprite::addChild(Node *child, int zOrder, int tag)
|
void Sprite::addChild(Node *child, int zOrder, int tag)
|
||||||
{
|
{
|
||||||
CCASSERT(child != nullptr, "Argument must be non-nullptr");
|
CCASSERT(child != nullptr, "Argument must be non-nullptr");
|
||||||
|
@ -796,15 +804,15 @@ void Sprite::setRotation(float rotation)
|
||||||
SET_DIRTY_RECURSIVELY();
|
SET_DIRTY_RECURSIVELY();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sprite::setRotationX(float fRotationX)
|
void Sprite::setRotationSkewX(float fRotationX)
|
||||||
{
|
{
|
||||||
Node::setRotationX(fRotationX);
|
Node::setRotationSkewX(fRotationX);
|
||||||
SET_DIRTY_RECURSIVELY();
|
SET_DIRTY_RECURSIVELY();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sprite::setRotationY(float fRotationY)
|
void Sprite::setRotationSkewY(float fRotationY)
|
||||||
{
|
{
|
||||||
Node::setRotationY(fRotationY);
|
Node::setRotationSkewY(fRotationY);
|
||||||
SET_DIRTY_RECURSIVELY();
|
SET_DIRTY_RECURSIVELY();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -844,9 +852,9 @@ void Sprite::setScale(float scaleX, float scaleY)
|
||||||
SET_DIRTY_RECURSIVELY();
|
SET_DIRTY_RECURSIVELY();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sprite::setVertexZ(float fVertexZ)
|
void Sprite::setPositionZ(float fVertexZ)
|
||||||
{
|
{
|
||||||
Node::setVertexZ(fVertexZ);
|
Node::setPositionZ(fVertexZ);
|
||||||
SET_DIRTY_RECURSIVELY();
|
SET_DIRTY_RECURSIVELY();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -408,8 +408,8 @@ public:
|
||||||
virtual void setPosition(const Point& pos) override;
|
virtual void setPosition(const Point& pos) override;
|
||||||
virtual void setPosition(float x, float y) override;
|
virtual void setPosition(float x, float y) override;
|
||||||
virtual void setRotation(float rotation) override;
|
virtual void setRotation(float rotation) override;
|
||||||
virtual void setRotationX(float rotationX) override;
|
virtual void setRotationSkewX(float rotationX) override;
|
||||||
virtual void setRotationY(float rotationY) override;
|
virtual void setRotationSkewY(float rotationY) override;
|
||||||
virtual void setSkewX(float sx) override;
|
virtual void setSkewX(float sx) override;
|
||||||
virtual void setSkewY(float sy) override;
|
virtual void setSkewY(float sy) override;
|
||||||
virtual void removeChild(Node* child, bool cleanup) override;
|
virtual void removeChild(Node* child, bool cleanup) override;
|
||||||
|
@ -419,7 +419,7 @@ public:
|
||||||
virtual void addChild(Node *child, int zOrder, int tag) override;
|
virtual void addChild(Node *child, int zOrder, int tag) override;
|
||||||
virtual void sortAllChildren() override;
|
virtual void sortAllChildren() override;
|
||||||
virtual void setScale(float scale) override;
|
virtual void setScale(float scale) override;
|
||||||
virtual void setVertexZ(float vertexZ) override;
|
virtual void setPositionZ(float positionZ) override;
|
||||||
virtual void setAnchorPoint(const Point& anchor) override;
|
virtual void setAnchorPoint(const Point& anchor) override;
|
||||||
virtual void ignoreAnchorPointForPosition(bool value) override;
|
virtual void ignoreAnchorPointForPosition(bool value) override;
|
||||||
virtual void setVisible(bool bVisible) override;
|
virtual void setVisible(bool bVisible) override;
|
||||||
|
|
Loading…
Reference in New Issue