diff options
| author | Howard Stearns <aech@lindenlab.com> | 2022-02-08 23:09:00 +0000 | 
|---|---|---|
| committer | Howard Stearns <aech@lindenlab.com> | 2022-02-08 23:09:00 +0000 | 
| commit | 8c64cc63cd3048d60912c74a4fd3dcbb47196be0 (patch) | |
| tree | b491c9291d508a00ff9dcecc94e89916b53c44ef /indra/newview | |
| parent | 1e36ef21132793b451d904de07a30c4f74a918f3 (diff) | |
| parent | b146de38de69167354da08e37dfd8903f2466f9d (diff) | |
Merged in SL-98 (pull request #864)
SL-98 - Render a "ground plane" in the model upload preview, so users can see any added offset
Approved-by: Andrey Kleshchev
Approved-by: Andrey Lihatskiy
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llmodelpreview.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/llmodelpreview.h | 1 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 41 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.h | 1 | 
4 files changed, 36 insertions, 41 deletions
diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index a9e80ab5da..f12ddb1745 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -3413,6 +3413,7 @@ BOOL LLModelPreview::render()                  {                      getPreviewAvatar()->renderBones();                  } +                renderGroundPlane(mPelvisZOffset);                  if (shader)                  {                      shader->bind(); @@ -3437,6 +3438,39 @@ BOOL LLModelPreview::render()      return TRUE;  } +void LLModelPreview::renderGroundPlane(float z_offset) +{   // Not necesarilly general - beware - but it seems to meet the needs of LLModelPreview::render +	const LLVOAvatar* avatarp = getPreviewAvatar(); +	const LLVector3 root_pos = avatarp->mRoot->getPosition(); +	const LLVector4a* ext = avatarp->mDrawable->getSpatialExtents(); +	const LLVector4a min = ext[0], max = ext[1]; +	const F32 center = (max[2] - min[2]) * 0.5f; +	const F32 ground = root_pos[2] - center - z_offset; + +	const LLVector3 vA{min[0], min[1], ground}; +	const LLVector3 vB{max[0], min[1], ground}; +	const LLVector3 vC{max[0], max[1], ground}; +	const LLVector3 vD{min[0], max[1], ground}; + +	gGL.diffuseColor3f( 1.0f, 0.0f, 1.0f ); + +	gGL.begin(LLRender::LINES); +	gGL.vertex3fv(vA.mV); +	gGL.vertex3fv(vB.mV); + +	gGL.vertex3fv(vB.mV); +	gGL.vertex3fv(vC.mV); + +	gGL.vertex3fv(vC.mV); +	gGL.vertex3fv(vD.mV); + +	gGL.vertex3fv(vD.mV); +	gGL.vertex3fv(vA.mV); + +	gGL.end(); +} + +  //-----------------------------------------------------------------------------  // refresh()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llmodelpreview.h b/indra/newview/llmodelpreview.h index 3664a27a72..60b510e415 100644 --- a/indra/newview/llmodelpreview.h +++ b/indra/newview/llmodelpreview.h @@ -217,6 +217,7 @@ private:      LLVOAvatar* getPreviewAvatar(void) { return mPreviewAvatar; }      // Count amount of original models, excluding sub-models      static U32 countRootModels(LLModelLoader::model_list models); +	void		renderGroundPlane(float z_offset = 0.0f);  protected:      friend class LLModelLoader; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 8bb5d97029..a6817f7a95 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1,4 +1,4 @@ -/**  +/**   * @File llvoavatar.cpp   * @brief Implementation of LLVOAvatar class which is a derivation of LLViewerObject   * @@ -176,8 +176,6 @@ const F32 MAX_STANDOFF_DISTANCE_CHANGE = 32;  // Should probably be 4 or 3, but didn't want to change it while change other logic - SJB  const S32 SWITCH_TO_BAKED_DISCARD = 5; -const F32 FOOT_COLLIDE_FUDGE = 0.04f; -  const F32 HOVER_EFFECT_MAX_SPEED = 3.f;  const F32 HOVER_EFFECT_STRENGTH = 0.f;  const F32 UNDERWATER_EFFECT_STRENGTH = 0.1f; @@ -599,7 +597,6 @@ S32 LLVOAvatar::sNumVisibleChatBubbles = 0;  BOOL LLVOAvatar::sDebugInvisible = FALSE;  BOOL LLVOAvatar::sShowAttachmentPoints = FALSE;  BOOL LLVOAvatar::sShowAnimationDebug = FALSE; -BOOL LLVOAvatar::sShowFootPlane = FALSE;  BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE;  F32 LLVOAvatar::sLODFactor = 1.f;  F32 LLVOAvatar::sPhysicsLODFactor = 1.f; @@ -5006,42 +5003,6 @@ U32 LLVOAvatar::renderSkinned()  		return num_indices;  	} -	// render collision normal -	// *NOTE: this is disabled (there is no UI for enabling sShowFootPlane) due -	// to DEV-14477.  the code is left here to aid in tracking down the cause -	// of the crash in the future. -brad -	if (sShowFootPlane && mDrawable.notNull()) -	{ -		LLVector3 slaved_pos = mDrawable->getPositionAgent(); -		LLVector3 foot_plane_normal(mFootPlane.mV[VX], mFootPlane.mV[VY], mFootPlane.mV[VZ]); -		F32 dist_from_plane = (slaved_pos * foot_plane_normal) - mFootPlane.mV[VW]; -		LLVector3 collide_point = slaved_pos; -		collide_point.mV[VZ] -= foot_plane_normal.mV[VZ] * (dist_from_plane + COLLISION_TOLERANCE - FOOT_COLLIDE_FUDGE); - -		gGL.begin(LLRender::LINES); -		{ -			F32 SQUARE_SIZE = 0.2f; -			gGL.color4f(1.f, 0.f, 0.f, 1.f); -			 -			gGL.vertex3f(collide_point.mV[VX] - SQUARE_SIZE, collide_point.mV[VY] - SQUARE_SIZE, collide_point.mV[VZ]); -			gGL.vertex3f(collide_point.mV[VX] + SQUARE_SIZE, collide_point.mV[VY] - SQUARE_SIZE, collide_point.mV[VZ]); - -			gGL.vertex3f(collide_point.mV[VX] + SQUARE_SIZE, collide_point.mV[VY] - SQUARE_SIZE, collide_point.mV[VZ]); -			gGL.vertex3f(collide_point.mV[VX] + SQUARE_SIZE, collide_point.mV[VY] + SQUARE_SIZE, collide_point.mV[VZ]); -			 -			gGL.vertex3f(collide_point.mV[VX] + SQUARE_SIZE, collide_point.mV[VY] + SQUARE_SIZE, collide_point.mV[VZ]); -			gGL.vertex3f(collide_point.mV[VX] - SQUARE_SIZE, collide_point.mV[VY] + SQUARE_SIZE, collide_point.mV[VZ]); -			 -			gGL.vertex3f(collide_point.mV[VX] - SQUARE_SIZE, collide_point.mV[VY] + SQUARE_SIZE, collide_point.mV[VZ]); -			gGL.vertex3f(collide_point.mV[VX] - SQUARE_SIZE, collide_point.mV[VY] - SQUARE_SIZE, collide_point.mV[VZ]); -			 -			gGL.vertex3f(collide_point.mV[VX], collide_point.mV[VY], collide_point.mV[VZ]); -			gGL.vertex3f(collide_point.mV[VX] + mFootPlane.mV[VX], collide_point.mV[VY] + mFootPlane.mV[VY], collide_point.mV[VZ] + mFootPlane.mV[VZ]); - -		} -		gGL.end(); -		gGL.flush(); -	}  	//--------------------------------------------------------------------  	// render all geometry attached to the skeleton  	//-------------------------------------------------------------------- diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 152e3b5610..71b252cf73 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -328,7 +328,6 @@ public:  	static bool		sLimitNonImpostors; // use impostors for far away avatars  	static F32		sRenderDistance; // distance at which avatars will render.  	static BOOL		sShowAnimationDebug; // show animation debug info -	static BOOL		sShowFootPlane;	// show foot collision plane reported by server  	static BOOL		sShowCollisionVolumes;	// show skeletal collision volumes  	static BOOL		sVisibleInFirstPerson;  	static S32		sNumLODChangesThisFrame;  | 
