mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-05 19:43:39 +02:00
Tweaks to voxel editing: edit from farther away, expand cubes to make sure
they show up over voxels, initialize voxel scale with moused-over scale.
This commit is contained in:
parent
27ed53301b
commit
0c8799bb3d
2 changed files with 15 additions and 4 deletions
|
@ -124,6 +124,7 @@ Application::Application(int& argc, char** argv, timeval &startup_time) :
|
||||||
_isHoverVoxel(false),
|
_isHoverVoxel(false),
|
||||||
_isHoverVoxelSounding(false),
|
_isHoverVoxelSounding(false),
|
||||||
_mouseVoxelScale(1.0f / 1024.0f),
|
_mouseVoxelScale(1.0f / 1024.0f),
|
||||||
|
_mouseVoxelScaleInitialized(false),
|
||||||
_justEditedVoxel(false),
|
_justEditedVoxel(false),
|
||||||
_nudgeStarted(false),
|
_nudgeStarted(false),
|
||||||
_lookingAlongX(false),
|
_lookingAlongX(false),
|
||||||
|
@ -1782,7 +1783,7 @@ void Application::shrinkMirrorView() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const float MAX_AVATAR_EDIT_VELOCITY = 1.0f;
|
const float MAX_AVATAR_EDIT_VELOCITY = 1.0f;
|
||||||
const float MAX_VOXEL_EDIT_DISTANCE = 20.0f;
|
const float MAX_VOXEL_EDIT_DISTANCE = 50.0f;
|
||||||
const float HEAD_SPHERE_RADIUS = 0.07;
|
const float HEAD_SPHERE_RADIUS = 0.07;
|
||||||
|
|
||||||
static QUuid DEFAULT_NODE_ID_REF;
|
static QUuid DEFAULT_NODE_ID_REF;
|
||||||
|
@ -2051,6 +2052,8 @@ void Application::updateMouseVoxels(float deltaTime, glm::vec3& mouseRayOrigin,
|
||||||
PerformanceWarning warn(showWarnings, "Application::updateMouseVoxels()");
|
PerformanceWarning warn(showWarnings, "Application::updateMouseVoxels()");
|
||||||
|
|
||||||
_mouseVoxel.s = 0.0f;
|
_mouseVoxel.s = 0.0f;
|
||||||
|
bool wasInitialized = _mouseVoxelScaleInitialized;
|
||||||
|
_mouseVoxelScaleInitialized = false;
|
||||||
if (Menu::getInstance()->isVoxelModeActionChecked() &&
|
if (Menu::getInstance()->isVoxelModeActionChecked() &&
|
||||||
(fabs(_myAvatar.getVelocity().x) +
|
(fabs(_myAvatar.getVelocity().x) +
|
||||||
fabs(_myAvatar.getVelocity().y) +
|
fabs(_myAvatar.getVelocity().y) +
|
||||||
|
@ -2058,6 +2061,12 @@ void Application::updateMouseVoxels(float deltaTime, glm::vec3& mouseRayOrigin,
|
||||||
|
|
||||||
if (_voxels.findRayIntersection(mouseRayOrigin, mouseRayDirection, _mouseVoxel, distance, face)) {
|
if (_voxels.findRayIntersection(mouseRayOrigin, mouseRayDirection, _mouseVoxel, distance, face)) {
|
||||||
if (distance < MAX_VOXEL_EDIT_DISTANCE) {
|
if (distance < MAX_VOXEL_EDIT_DISTANCE) {
|
||||||
|
// set the voxel scale to that of the first moused-over voxel
|
||||||
|
if (!wasInitialized) {
|
||||||
|
_mouseVoxelScale = _mouseVoxel.s;
|
||||||
|
}
|
||||||
|
_mouseVoxelScaleInitialized = true;
|
||||||
|
|
||||||
// find the nearest voxel with the desired scale
|
// find the nearest voxel with the desired scale
|
||||||
if (_mouseVoxelScale > _mouseVoxel.s) {
|
if (_mouseVoxelScale > _mouseVoxel.s) {
|
||||||
// choose the larger voxel that encompasses the one selected
|
// choose the larger voxel that encompasses the one selected
|
||||||
|
@ -2990,6 +2999,7 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly) {
|
||||||
glDisable(GL_LIGHTING);
|
glDisable(GL_LIGHTING);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glScalef(TREE_SCALE, TREE_SCALE, TREE_SCALE);
|
glScalef(TREE_SCALE, TREE_SCALE, TREE_SCALE);
|
||||||
|
const float CUBE_EXPANSION = 1.01f;
|
||||||
if (_nudgeStarted) {
|
if (_nudgeStarted) {
|
||||||
renderNudgeGuide(_nudgeGuidePosition.x, _nudgeGuidePosition.y, _nudgeGuidePosition.z, _nudgeVoxel.s);
|
renderNudgeGuide(_nudgeGuidePosition.x, _nudgeGuidePosition.y, _nudgeGuidePosition.z, _nudgeVoxel.s);
|
||||||
renderNudgeGrid(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s, _mouseVoxel.s);
|
renderNudgeGrid(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s, _mouseVoxel.s);
|
||||||
|
@ -2999,7 +3009,7 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly) {
|
||||||
_nudgeVoxel.z + _nudgeVoxel.s * 0.5f);
|
_nudgeVoxel.z + _nudgeVoxel.s * 0.5f);
|
||||||
glColor3ub(255, 255, 255);
|
glColor3ub(255, 255, 255);
|
||||||
glLineWidth(4.0f);
|
glLineWidth(4.0f);
|
||||||
glutWireCube(_nudgeVoxel.s);
|
glutWireCube(_nudgeVoxel.s * CUBE_EXPANSION);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
} else {
|
} else {
|
||||||
renderMouseVoxelGrid(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
|
renderMouseVoxelGrid(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
|
||||||
|
@ -3018,13 +3028,13 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly) {
|
||||||
_nudgeGuidePosition.y + _nudgeVoxel.s*0.5f,
|
_nudgeGuidePosition.y + _nudgeVoxel.s*0.5f,
|
||||||
_nudgeGuidePosition.z + _nudgeVoxel.s*0.5f);
|
_nudgeGuidePosition.z + _nudgeVoxel.s*0.5f);
|
||||||
glLineWidth(4.0f);
|
glLineWidth(4.0f);
|
||||||
glutWireCube(_nudgeVoxel.s);
|
glutWireCube(_nudgeVoxel.s * CUBE_EXPANSION);
|
||||||
} else {
|
} else {
|
||||||
glTranslatef(_mouseVoxel.x + _mouseVoxel.s*0.5f,
|
glTranslatef(_mouseVoxel.x + _mouseVoxel.s*0.5f,
|
||||||
_mouseVoxel.y + _mouseVoxel.s*0.5f,
|
_mouseVoxel.y + _mouseVoxel.s*0.5f,
|
||||||
_mouseVoxel.z + _mouseVoxel.s*0.5f);
|
_mouseVoxel.z + _mouseVoxel.s*0.5f);
|
||||||
glLineWidth(4.0f);
|
glLineWidth(4.0f);
|
||||||
glutWireCube(_mouseVoxel.s);
|
glutWireCube(_mouseVoxel.s * CUBE_EXPANSION);
|
||||||
}
|
}
|
||||||
glLineWidth(1.0f);
|
glLineWidth(1.0f);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
|
@ -378,6 +378,7 @@ private:
|
||||||
|
|
||||||
VoxelDetail _mouseVoxel; // details of the voxel to be edited
|
VoxelDetail _mouseVoxel; // details of the voxel to be edited
|
||||||
float _mouseVoxelScale; // the scale for adding/removing voxels
|
float _mouseVoxelScale; // the scale for adding/removing voxels
|
||||||
|
bool _mouseVoxelScaleInitialized;
|
||||||
glm::vec3 _lastMouseVoxelPos; // the position of the last mouse voxel edit
|
glm::vec3 _lastMouseVoxelPos; // the position of the last mouse voxel edit
|
||||||
bool _justEditedVoxel; // set when we've just added/deleted/colored a voxel
|
bool _justEditedVoxel; // set when we've just added/deleted/colored a voxel
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue