Showing the changes to interface/src/MetavoxelSystem.cpp (1 of 8 files). Show all
Unified · Split
| @@ -2868,7 +2868,7 @@ void SphereRenderer::render(const glm::vec4& color, Mode mode) { · 2867 unmodified lines | ||
| 2868 | 2868 | glm::vec3 axis = glm::axis(rotation); |
| 2869 | 2869 | glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); |
| 2870 | 2870 | |
| 2871 | − Application::getInstance()->getGeometryCache()->renderSphere(sphere->getScale(), 10, 10); | |
| 2871 | + Application::getInstance()->getDeferredLightingEffect()->renderSolidSphere(sphere->getScale(), 32, 32); | |
| 2872 | 2872 | |
| 2873 | 2873 | glPopMatrix(); |
| 2874 | 2874 | } |
| @@ -2889,7 +2889,7 @@ void CuboidRenderer::render(const glm::vec4& color, Mode mode) { · 14 unmodified lines | ||
| 2889 | 2889 | glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); |
| 2890 | 2890 | glScalef(1.0f, cuboid->getAspectY(), cuboid->getAspectZ()); |
| 2891 | 2891 | |
| 2892 | − glutSolidCube(cuboid->getScale() * 2.0f); | |
| 2892 | + Application::getInstance()->getDeferredLightingEffect()->renderSolidCube(cuboid->getScale() * 2.0f); | |
| 2893 | 2893 | |
| 2894 | 2894 | glPopMatrix(); |
| 2895 | 2895 | } |
| @@ -3038,12 +3038,12 @@ void HeightfieldRenderer::render(const glm::vec4& color, Mode mode) { · 142 unmodified lines | ||
| 3038 | 3038 | float xStep = 1.0f / (innerWidth - 1); |
| 3039 | 3039 | float zStep = 1.0f / (innerHeight - 1); |
| 3040 | 3040 | float z = -zStep; |
| 3041 | − float sStep = 1.0f / innerWidth; | |
| 3042 | − float tStep = 1.0f / innerHeight; | |
| 3043 | − float t = -tStep / 2.0f; | |
| 3041 | + float sStep = 1.0f / width; | |
| 3042 | + float tStep = 1.0f / height; | |
| 3043 | + float t = tStep / 2.0f; | |
| 3044 | 3044 | for (int i = 0; i < height; i++, z += zStep, t += tStep) { |
| 3045 | 3045 | float x = -xStep; |
| 3046 | − float s = -sStep / 2.0f; | |
| 3046 | + float s = sStep / 2.0f; | |
| 3047 | 3047 | const float SKIRT_LENGTH = 0.25f; |
| 3048 | 3048 | float baseY = (i == 0 || i == height - 1) ? -SKIRT_LENGTH : 0.0f; |
| 3049 | 3049 | for (int j = 0; j < width; j++, point++, x += xStep, s += sStep) { |
| @@ -3086,8 +3086,8 @@ void HeightfieldRenderer::render(const glm::vec4& color, Mode mode) { · 36 unmodified lines | ||
| 3086 | 3086 | glTranslatef(heightfield->getTranslation().x, heightfield->getTranslation().y, heightfield->getTranslation().z); |
| 3087 | 3087 | glm::vec3 axis = glm::axis(heightfield->getRotation()); |
| 3088 | 3088 | glRotatef(glm::degrees(glm::angle(heightfield->getRotation())), axis.x, axis.y, axis.z); |
| 3089 | − glScalef(heightfield->getScale(), heightfield->getScale() * heightfield->getAspectY(), | |
| 3090 | − heightfield->getScale() * heightfield->getAspectZ()); | |
| 3089 | + float xScale = heightfield->getScale(), zScale = xScale * heightfield->getAspectZ(); | |
| 3090 | + glScalef(xScale, xScale * heightfield->getAspectY(), zScale); | |
| 3091 | 3091 | |
| 3092 | 3092 | Application::getInstance()->getTextureCache()->setPrimaryDrawBuffers(true, true); |
| 3093 | 3093 | |
| @@ -3106,17 +3106,16 @@ void HeightfieldRenderer::render(const glm::vec4& color, Mode mode) { · 12 unmodified lines | ||
| 3106 | 3106 | glColor4f(1.0f, 1.0f, 1.0f, 1.0f); |
| 3107 | 3107 | |
| 3108 | 3108 | DefaultMetavoxelRendererImplementation::getBaseHeightfieldProgram().bind(); |
| 3109 | + float sDistance = 2.0f / (innerWidth - 1); | |
| 3110 | + float tDistance = 2.0f / (innerHeight - 1); | |
| 3111 | + float distanceProduct = -sDistance * tDistance; | |
| 3109 | 3112 | DefaultMetavoxelRendererImplementation::getBaseHeightfieldProgram().setUniformValue( |
| 3110 | − DefaultMetavoxelRendererImplementation::getBaseHeightScaleLocation(), 1.0f / innerWidth, 1.0f / innerHeight, | |
| 3111 | − 2.0f / (innerWidth * innerHeight)); | |
| 3112 | − if (heightfield->getColor()) { | |
| 3113 | − int colorWidth = heightfield->getColor()->getWidth(); | |
| 3114 | − int colorHeight = heightfield->getColor()->getContents().size() / (colorWidth * DataBlock::COLOR_BYTES); | |
| 3115 | − DefaultMetavoxelRendererImplementation::getBaseHeightfieldProgram().setUniformValue( | |
| 3116 | − DefaultMetavoxelRendererImplementation::getBaseColorScaleLocation(), (float)innerWidth / colorWidth, | |
| 3117 | − (float)innerHeight / colorHeight); | |
| 3118 | − } | |
| 3119 | − | |
| 3113 | + DefaultMetavoxelRendererImplementation::getBaseHeightScaleLocation(), 1.0f / width, 1.0f / height, | |
| 3114 | + sDistance / distanceProduct, tDistance / distanceProduct); | |
| 3115 | + DefaultMetavoxelRendererImplementation::getBaseHeightfieldProgram().setUniformValue( | |
| 3116 | + DefaultMetavoxelRendererImplementation::getBaseColorScaleLocation(), (float)width / innerWidth, | |
| 3117 | + (float)height / innerHeight); | |
| 3118 | + | |
| 3120 | 3119 | glBindTexture(GL_TEXTURE_2D, _heightTextureID); |
| 3121 | 3120 | |
| 3122 | 3121 | glActiveTexture(GL_TEXTURE1); |
| @@ -3127,19 +3126,93 @@ void HeightfieldRenderer::render(const glm::vec4& color, Mode mode) { · 4 unmodified lines | ||
| 3127 | 3126 | glBindTexture(GL_TEXTURE_2D, 0); |
| 3128 | 3127 | glActiveTexture(GL_TEXTURE0); |
| 3129 | 3128 | |
| 3130 | − glBindTexture(GL_TEXTURE_2D, 0); | |
| 3129 | + Application::getInstance()->getTextureCache()->setPrimaryDrawBuffers(true, false); | |
| 3131 | 3130 | |
| 3132 | 3131 | DefaultMetavoxelRendererImplementation::getBaseHeightfieldProgram().release(); |
| 3133 | 3132 | |
| 3134 | 3133 | glDisable(GL_ALPHA_TEST); |
| 3135 | − glDisable(GL_CULL_FACE); | |
| 3136 | 3134 | glEnable(GL_BLEND); |
| 3137 | 3135 | |
| 3136 | + if (heightfield->getMaterial() && !_networkTextures.isEmpty()) { | |
| 3137 | + glDepthFunc(GL_LEQUAL); | |
| 3138 | + glDepthMask(false); | |
| 3139 | + glEnable(GL_POLYGON_OFFSET_FILL); | |
| 3140 | + glPolygonOffset(-1.0f, -1.0f); | |
| 3141 | + | |
| 3142 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldProgram().bind(); | |
| 3143 | + const DefaultMetavoxelRendererImplementation::SplatLocations& locations = | |
| 3144 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldLocations(); | |
| 3145 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldProgram().setUniformValue( | |
| 3146 | + locations.heightScale, 1.0f / width, 1.0f / height); | |
| 3147 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldProgram().setUniformValue( | |
| 3148 | + locations.textureScale, (float)width / innerWidth, (float)height / innerHeight); | |
| 3149 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldProgram().setUniformValue(locations.splatTextureOffset, | |
| 3150 | + glm::dot(heightfield->getTranslation(), heightfield->getRotation() * glm::vec3(1.0f, 0.0f, 0.0f)) / xScale, | |
| 3151 | + glm::dot(heightfield->getTranslation(), heightfield->getRotation() * glm::vec3(0.0f, 0.0f, 1.0f)) / zScale); | |
| 3152 | + | |
| 3153 | + glBindTexture(GL_TEXTURE_2D, _materialTextureID); | |
| 3154 | + | |
| 3155 | + const QVector<SharedObjectPointer>& materials = heightfield->getMaterial()->getMaterials(); | |
| 3156 | + for (int i = 0; i < materials.size(); i += SPLAT_COUNT) { | |
| 3157 | + QVector4D scalesS, scalesT; | |
| 3158 | + | |
| 3159 | + for (int j = 0; j < SPLAT_COUNT; j++) { | |
| 3160 | + glActiveTexture(GL_TEXTURE0 + SPLAT_TEXTURE_UNITS[j]); | |
| 3161 | + int index = i + j; | |
| 3162 | + if (index < _networkTextures.size()) { | |
| 3163 | + const NetworkTexturePointer& texture = _networkTextures.at(index); | |
| 3164 | + if (texture) { | |
| 3165 | + MaterialObject* material = static_cast<MaterialObject*>(materials.at(index).data()); | |
| 3166 | + scalesS[j] = xScale / material->getScaleS(); | |
| 3167 | + scalesT[j] = zScale / material->getScaleT(); | |
| 3168 | + glBindTexture(GL_TEXTURE_2D, texture->getID()); | |
| 3169 | + } else { | |
| 3170 | + glBindTexture(GL_TEXTURE_2D, 0); | |
| 3171 | + } | |
| 3172 | + } else { | |
| 3173 | + glBindTexture(GL_TEXTURE_2D, 0); | |
| 3174 | + } | |
| 3175 | + } | |
| 3176 | + const float QUARTER_STEP = 0.25f * EIGHT_BIT_MAXIMUM_RECIPROCAL; | |
| 3177 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldProgram().setUniformValue( | |
| 3178 | + locations.splatTextureScalesS, scalesS); | |
| 3179 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldProgram().setUniformValue( | |
| 3180 | + locations.splatTextureScalesT, scalesT); | |
| 3181 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldProgram().setUniformValue( | |
| 3182 | + locations.textureValueMinima, | |
| 3183 | + (i + 1) * EIGHT_BIT_MAXIMUM_RECIPROCAL - QUARTER_STEP, (i + 2) * EIGHT_BIT_MAXIMUM_RECIPROCAL - QUARTER_STEP, | |
| 3184 | + (i + 3) * EIGHT_BIT_MAXIMUM_RECIPROCAL - QUARTER_STEP, (i + 4) * EIGHT_BIT_MAXIMUM_RECIPROCAL - QUARTER_STEP); | |
| 3185 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldProgram().setUniformValue( | |
| 3186 | + locations.textureValueMaxima, | |
| 3187 | + (i + 1) * EIGHT_BIT_MAXIMUM_RECIPROCAL + QUARTER_STEP, (i + 2) * EIGHT_BIT_MAXIMUM_RECIPROCAL + QUARTER_STEP, | |
| 3188 | + (i + 3) * EIGHT_BIT_MAXIMUM_RECIPROCAL + QUARTER_STEP, (i + 4) * EIGHT_BIT_MAXIMUM_RECIPROCAL + QUARTER_STEP); | |
| 3189 | + glDrawRangeElements(GL_TRIANGLES, 0, vertexCount - 1, indexCount, GL_UNSIGNED_INT, 0); | |
| 3190 | + } | |
| 3191 | + | |
| 3192 | + for (int i = 0; i < SPLAT_COUNT; i++) { | |
| 3193 | + glActiveTexture(GL_TEXTURE0 + SPLAT_TEXTURE_UNITS[i]); | |
| 3194 | + glBindTexture(GL_TEXTURE_2D, 0); | |
| 3195 | + } | |
| 3196 | + | |
| 3197 | + glActiveTexture(GL_TEXTURE1); | |
| 3198 | + glBindTexture(GL_TEXTURE_2D, 0); | |
| 3199 | + | |
| 3200 | + glActiveTexture(GL_TEXTURE0); | |
| 3201 | + | |
| 3202 | + DefaultMetavoxelRendererImplementation::getSplatHeightfieldProgram().release(); | |
| 3203 | + | |
| 3204 | + glDisable(GL_POLYGON_OFFSET_FILL); | |
| 3205 | + glDepthMask(true); | |
| 3206 | + glDepthFunc(GL_LESS); | |
| 3207 | + } | |
| 3208 | + | |
| 3209 | + glBindTexture(GL_TEXTURE_2D, 0); | |
| 3210 | + | |
| 3211 | + glDisable(GL_CULL_FACE); | |
| 3212 | + | |
| 3138 | 3213 | glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
| 3139 | 3214 | glDisableClientState(GL_VERTEX_ARRAY); |
| 3140 | 3215 | |
| 3141 | − Application::getInstance()->getTextureCache()->setPrimaryDrawBuffers(true); | |
| 3142 | − | |
| 3143 | 3216 | glPopMatrix(); |
| 3144 | 3217 | |
| 3145 | 3218 | bufferPair.first.release(); |